Python:运行os.system后如何获取stdout?[重复]
这个问题已经在这里有了答案 :
运行shell命令并捕获输出 (18个答案)
9个月前关闭。
我想stdout
在运行os.system
调用后获取in变量。
让我们以这行为例:
batcmd="dir"
result = os.system(batcmd)
result
将包含错误代码(对于上述示例,stderr
0
在Windows或1
某些Linux下)。
如何stdout
在执行的命令中不使用重定向的情况下获取上述命令的?
-
如果您只需要
stdout
输出,那么看看subprocess.check_output()
:import subprocess batcmd="dir" result = subprocess.check_output(batcmd, shell=True)
因为您正在使用
os.system()
,所以您必须进行设置shell=True
才能获得相同的行为。您确实要注意将不可信参数传递给您的Shell的安全问题。如果还需要捕获
stderr
,只需将其添加stderr=subprocess.STDOUT
到呼叫中:result = subprocess.check_output([batcmd], stderr=subprocess.STDOUT)
将错误输出重定向到默认输出流。
如果您知道输出是文本,则添加
text=True
以使用平台默认编码对返回的字节值进行解码;使用encoding="..."
而不是如果该编解码器是不适合你接收到的数据是正确的。