【发布时间】:2011-05-23 10:38:51
【问题描述】:
我可以使用os.system() 执行终端命令,但我想捕获此命令的输出。我该怎么做?
【问题讨论】:
我可以使用os.system() 执行终端命令,但我想捕获此命令的输出。我该怎么做?
【问题讨论】:
>>> import subprocess
>>> cmd = [ 'echo', 'arg1', 'arg2' ]
>>> output = subprocess.Popen( cmd, stdout=subprocess.PIPE ).communicate()[0]
>>> print output
arg1 arg2
使用 subprocess.PIPE 时存在错误。对于巨大的输出使用这个:
import subprocess
import tempfile
with tempfile.TemporaryFile() as tempf:
proc = subprocess.Popen(['echo', 'a', 'b'], stdout=tempf)
proc.wait()
tempf.seek(0)
print tempf.read()
【讨论】:
Python 3.5 及以上版本推荐使用subprocess.run():
from subprocess import run
output = run("pwd", capture_output=True).stdout
【讨论】:
subprocess 模块中定义的,所以需要导入。
/dev/tty 进行读取和写入来从“控制终端”读取。不过,我不确定这种模式是否是个好主意。
【讨论】:
Popen 对象没有 readlines() 方法。
os.popen 已弃用,取而代之的是 subprocess.Popen。
最简单的方法是使用库命令
import commands
print commands.getstatusoutput('echo "test" | wc')
【讨论】: