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