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

3 投票
4 回答
18457 浏览
提问于 2025-04-17 10:01

我正在用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

文档中包括了如何捕获输出,以及以不同方式调用命令行。

撰写回答