【问题标题】:How to avoid os.system() printing out return value in python如何避免 os.system() 在 python 中打印出返回值
【发布时间】:2012-02-08 00:51:45
【问题描述】:

我正在使用 Python 调用 bash 来执行另一个 bash 脚本:

begin = int(sys.argv[1])
result = os.system("/tesladata/isetools/cdISE.bash %s" %begin)

在我打印了result 之后,它不仅给了我输出,还给了我返回状态(这里是0)。 如果我只需要输出,我该怎么办?

另外,出于好奇,在 Python 中有多少种调用 bash 的方法?如果有人能给我一些关于如何使用它们的参考,我会很高兴,到目前为止我只找到了os.system()os.popen()

【问题讨论】:

标签: python bash call


【解决方案1】:

其实result只是一个整数的返回状态。你调用的东西写入标准输出,它从你的程序继承,所以你会看到它立即打印出来。您的程序永远无法使用它。

查看子流程模块文档了解更多信息:

http://docs.python.org/library/subprocess.html

包括捕获输出,以及以不同方式调用 shell。

【讨论】:

【解决方案2】:

您可以通过管道发送到/dev/null 来丢弃任何输出。

begin = int(sys.argv[1])
result = os.system("/tesladata/isetools/cdISE.bash %s > /dev/null" %begin)

如果您也不想显示错误,请将> 更改为2&> 以丢弃stderr

【讨论】:

    【解决方案3】:

    你的python脚本根本没有bash脚本的输出,只有它返回的“0”。 bash 脚本的输出与 python 脚本进入相同的输出流,并在打印结果值之前打印。如果您不想看到 0,请不要打印结果。

    【讨论】:

    • 感谢您的回复。我想你是对的,但是如果我想从 bash 脚本中获取输出并将其存储在其他地方怎么办?
    • @dazhuangcao 如果要输出,请使用 os.popen 或 subprocess
    【解决方案4】:

    你可以像这样使用子进程模块 将其分配给 var(x 代表 ex)

    import subprocess
    x = subprocess.run('your_command',capture_output=True)
    

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      相关资源
      最近更新 更多