在运行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
复制相似问题