将os.system的输出赋给变量并阻止其在屏幕上显示
我想把我用 os.system
运行的命令的输出结果赋值给一个变量,并且不想让它显示在屏幕上。但是,在下面的代码中,输出结果还是显示在了屏幕上,而 var
打印出来的值是 0,我猜这个值表示命令是否成功运行。有没有办法把命令的输出结果赋值给变量,同时又不让它在屏幕上显示呢?
var = os.system("cat /etc/services")
print var #Prints 0
8 个回答
48
commands模块是一个相对简单的方法来实现这个功能:
import commands
status, output = commands.getstatusoutput("cat /etc/services")
这里的状态是0,输出的内容是/etc/services文件的内容。
238
你可能还想看看 subprocess
模块,它是为了替代Python中所有类似 popen
的调用而创建的。
import subprocess
output = subprocess.check_output("cat /etc/services", shell=True)
它的好处在于,你可以灵活地调用命令,并且可以自由选择标准输入、输出和错误信息的连接方式等等。
652
在我很久以前问的这个问题中,你可能想用的是 popen
:
os.popen('cat /etc/services').read()
这个功能是通过subprocess.Popen实现的;你可以查看这个类的文档,了解更强大的方法来管理和与子进程进行通信。
下面是 subprocess
的对应代码:
import subprocess
proc = subprocess.Popen(["cat", "/etc/services"], stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
print("program output:", out)