首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:在运行os.system后如何获取标准输出?

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

Stack Overflow用户
提问于 2013-09-11 18:54:33
回答 6查看 244.3K关注 0票数 123

在运行os.system调用之后,我希望在一个变量中获得stdout

让我们以这一行为例:

代码语言:javascript
复制
batcmd="dir"
result = os.system(batcmd)

result将包含错误代码(对于上面的示例,在Windows下是stderr 0,在某些linux下是1 )。

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-09-11 19:24:24

如果您需要的只是stdout输出,那么可以看看subprocess.check_output()

代码语言:javascript
复制
import subprocess

batcmd="dir"
result = subprocess.check_output(batcmd, shell=True)

因为您使用的是os.system(),所以必须设置shell=True才能获得相同的行为。您确实希望注意security concerns关于将不可信的参数传递给shell的问题。

如果您还需要捕获stderr,只需将stderr=subprocess.STDOUT添加到调用:

代码语言:javascript
复制
result = subprocess.check_output([batcmd], stderr=subprocess.STDOUT)

将错误输出重定向到默认输出流。

如果您知道输出是文本,则添加text=True以使用平台默认编码解码返回的字节值;如果该编解码器对您接收的数据不正确,请使用encoding="..."

票数 150
EN

Stack Overflow用户

发布于 2014-10-13 23:38:43

这些答案对我不起作用。我不得不使用以下代码:

代码语言:javascript
复制
import subprocess
p = subprocess.Popen(["pwd"], stdout=subprocess.PIPE)
out = p.stdout.read()
print out

或者作为一个函数(我在Python2.6.7上需要使用shell=True,并且直到2.7时才添加check_output,这使得它在这里不可用):

代码语言:javascript
复制
def system_call(command):
    p = subprocess.Popen([command], stdout=subprocess.PIPE, shell=True)
    return p.stdout.read()
票数 25
EN

Stack Overflow用户

发布于 2019-09-13 00:27:04

代码语言:javascript
复制
import subprocess
string="echo Hello world"
result=subprocess.getoutput(string)
print("result::: ",result)
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18739239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档