我想在运行 os.system
调用后获取变量中的 stdout
。
我们以这一行为例:
batcmd="dir"
result = os.system(batcmd)
result
将包含错误代码(Windows 下的 stderr
0
或某些 linux 下的 1
用于上述示例)。
如何在不使用重定向的情况下获取上述命令的 stdout
执行命令?
最佳答案
如果您只需要 stdout
输出,请查看 subprocess.check_output()
:
import subprocess
batcmd="dir"
result = subprocess.check_output(batcmd, shell=True)
因为您使用的是 os.system()
,所以您必须设置 shell=True
才能获得相同的行为。您确实想注意 security concerns关于将不受信任的参数传递给你的 shell。
如果您还需要捕获 stderr
,只需在调用中添加 stderr=subprocess.STDOUT
:
result = subprocess.check_output([batcmd], stderr=subprocess.STDOUT)
将错误输出重定向到默认输出流。
如果知道输出是文本,添加 text=True
以平台默认编码解码返回的字节值;如果该编解码器对于您收到的数据不正确,请改用 encoding="..."
。
关于Python:运行 os.system 后如何获取标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18739239/