Python:运行 os.system 后如何获取标准输出?

标签 python python-2.7 stdout stderr os.system

我想在运行 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/

相关文章:

macos - 失败,退出状态为 69

python - 如何使用 Cython 类型的内存 View 接受来自 Python 的字符串?

从文件或标准输入读取并删除空行的 C 程序

linux - linux中向stdout写入数据是否占用磁盘空间?

c - 将 stderr 重定向到文件,将 stdout 重定向到控制台

python - 按大写单词拆分一串单词

python - Pandas:使用列值的随机采样替换 NaN

python - 在 Python 中使用 Regex 获取特定字符串

从列表中删除相似项目的pythonic方法

python - CSV 日期解析的 Dask 性能慢?