将os.system的输出赋给变量并阻止其在屏幕上显示

435 投票
8 回答
783720 浏览
提问于 2025-04-16 02:55

我想把我用 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()

根据Python 3.6的文档

这个功能是通过subprocess.Popen实现的;你可以查看这个类的文档,了解更强大的方法来管理和与子进程进行通信。


下面是 subprocess 的对应代码:

import subprocess

proc = subprocess.Popen(["cat", "/etc/services"], stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
print("program output:", out)

撰写回答