如何避免os.system()在Python中打印返回值
我正在用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 个回答
2
你的Python脚本并没有显示bash脚本的输出,只是显示了一个“0”。其实,bash脚本的输出和Python脚本的输出是一起的,而且在你打印结果之前,bash脚本的内容就已经打印出来了。如果你不想看到这个“0”,那就别打印结果。
6
你可以通过把输出发送到 /dev/null
来直接丢掉任何输出。
begin = int(sys.argv[1])
result = os.system("/tesladata/isetools/cdISE.bash %s > /dev/null" %begin)
如果你也不想显示错误信息,可以把 >
改成 2&>
,这样就可以把错误信息 stderr
也丢掉了。
7
其实,result
只是一个整数,表示返回状态。你调用的那个东西是写入标准输出(stdout)的,而这个标准输出是从你的程序继承来的,所以你看到的内容会立刻打印出来。这个输出在你的程序中是无法获取的。
想了解更多信息,可以查看 subprocess 模块的文档:
http://docs.python.org/library/subprocess.html
文档中包括了如何捕获输出,以及以不同方式调用命令行。