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

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


你的第二个问题已经在这里讨论过了(https://dev59.com/e0_Ta4cB1Zd3GeqPDsN2)和(https://dev59.com/cG855IYBdhLWcg3wlVca)。 - Bry6n
4个回答

7

result实际上只是一个整数类型的返回状态。你在调用的函数中看到的输出信息是输出到标准输出流(stdout)中,这个流是从你的程序继承来的,所以你可以立即看到它被打印出来。但这些输出信息对于你的程序来说是不可用的。

如果想要获取更多信息,请查看subprocess模块文档:

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

文档中还包含获取输出信息和以不同的方式调用shell等内容。


4
具体来说,看起来他想要使用subprocess.check_output - Thomas K

6

您可以通过将输出导向/dev/null来将其丢弃。

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

如果您也不想显示错误信息,那么将>改为2&>,以便同时丢弃stderr


2

您的Python脚本根本没有Bash脚本的输出,只返回了它的“0”。Bash脚本的输出与Python脚本的输出流相同,在打印result值之前就已经打印出来了。如果您不想看到0,请不要打印result。


谢谢您的回复。我想您是正确的,但如果我想从Bash脚本中获取输出并将其存储在其他地方怎么办? - Shang Wang
如果你想要输出,可以使用os.popen或subprocess。 - William Pursell

2
你可以像这样使用subprocess模块,将其分配给一个变量(例如x)。
import subprocess
x = subprocess.run('your_command',capture_output=True)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接