如何在Python中获取终端输出?
我可以用 os.system()
来执行一个终端命令,但我想要获取这个命令的输出。那我该怎么做呢?
4 个回答
15
你可以使用 Popen 这个功能,它在 subprocess
里有介绍,正如他们所建议的那样。
如果用 os
,虽然不推荐,代码大概是这样的:
import os
a = os.popen('pwd').readlines()
33
在Python 3.5及以上版本中,推荐的做法是使用 subprocess.run()
这个方法:
from subprocess import run
output = run("pwd", capture_output=True).stdout
51
>>> import subprocess
>>> cmd = [ 'echo', 'arg1', 'arg2' ]
>>> output = subprocess.Popen( cmd, stdout=subprocess.PIPE ).communicate()[0]
>>> print(output)
arg1 arg2
在使用subprocess.PIPE的时候有个bug。如果输出很大的话,可以使用这个方法:
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())