如何避免os.system()在python中打印出返回值

时间:2012-01-11 16:44:19

标签: python bash call

我使用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()

4 个答案:

答案 0 :(得分:7)

实际上,result只是整数的返回状态。你正在调用的东西写入stdout,它继承自你的程序,所以你看到它立即打印出来。它永远不会出现在你的程序中。

查看子流程模块文档以获取更多信息:

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

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

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

您可以像这样使用子流程模块 将其分配给var(x表示ex)

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