Python:运行os.system后如何获取stdout?[重复]

发布于 2021-01-29 15:04:15

这个问题已经在这里有了答案

运行shell命令并捕获输出 (18个答案)

9个月前关闭。

我想stdout在运行os.system调用后获取in变量。

让我们以这行为例:

batcmd="dir"
result = os.system(batcmd)

result将包含错误代码(对于上述示例,stderr 0在Windows或1某些Linux下)。

如何stdout在执行的命令中不使用重定向的情况下获取上述命令的?

关注者
0
被浏览
114
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如果您只需要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="..."而不是如果该编解码器是不适合你接收到的数据是正确的。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看