在运行os.system
调用之后,我希望在一个变量中获得stdout
。
让我们以这一行为例:
batcmd="dir"
result = os.system(batcmd)
result
将包含错误代码(对于上面的示例,在Windows下是stderr
0
,在某些linux下是1
)。
如何在执行的命令中不使用重定向的情况下获取上述命令的stdout
?
发布于 2013-09-11 19:24:24
如果您需要的只是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="..."
。
发布于 2014-10-13 23:38:43
这些答案对我不起作用。我不得不使用以下代码:
import subprocess
p = subprocess.Popen(["pwd"], stdout=subprocess.PIPE)
out = p.stdout.read()
print out
或者作为一个函数(我在Python2.6.7上需要使用shell=True,并且直到2.7时才添加check_output,这使得它在这里不可用):
def system_call(command):
p = subprocess.Popen([command], stdout=subprocess.PIPE, shell=True)
return p.stdout.read()
发布于 2019-09-13 00:27:04
import subprocess
string="echo Hello world"
result=subprocess.getoutput(string)
print("result::: ",result)
https://stackoverflow.com/questions/18739239
复制相似问题