如何在Python中获取终端输出?

47 投票
4 回答
171539 浏览
提问于 2025-04-16 08:21

我可以用 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())

撰写回答