如何在 python 中获取终端输出? [复制]

Posted

技术标签:

【中文标题】如何在 python 中获取终端输出? [复制]【英文标题】:How can I get terminal output in python? [duplicate] 【发布时间】:2011-05-23 10:38:51 【问题描述】:

我可以使用os.system() 执行终端命令,但我想捕获此命令的输出。我该怎么做?

【问题讨论】:

【参考方案1】:
>>> 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()

【讨论】:

你是我的救星!!!这几天我一直在找这样的东西!!!谢谢!【参考方案2】:

Python 3.5 及以上版本推荐使用subprocess.run():

from subprocess import run
output = run("pwd", capture_output=True).stdout

【讨论】:

管道未定义 @Cherona 是在subprocess 模块中定义的,所以需要导入。 我还使用最新的 API 更新了答案。 @HelenCraigman 我明白了。在 Unix 上,您仍然可以通过打开 /dev/tty 进行读取和写入来从“控制终端”读取。不过,我不确定这种模式是否是个好主意。 FileNotFoundError: [WinError 2] 系统找不到指定的文件【参考方案3】:

您可以按照他们的建议在subprocess 中使用Popen。

os,不推荐,如下:

import os
a  = os.popen('pwd').readlines()

【讨论】:

这不起作用。 Popen 对象没有 readlines() 方法。 感谢指出,它只适用于os.popen os.popen 已弃用,取而代之的是 subprocess.Popen【参考方案4】:

最简单的方法是使用库命令

import commands
print commands.getstatusoutput('echo "test" | wc')

【讨论】:

从哪里获得命令模块?它似乎不在 Python3 的 pip 上。 @Shule commands 是一个较旧的模块。它被 subprocess 模块取代。 docs.python.org/2/library/…

以上是关于如何在 python 中获取终端输出? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python:运行 os.system 后如何获取标准输出? [复制]

如何使用Linux终端(如python,在gcc或g ++中编译一行C ++代码?

如何使用python进行颜色输出? [复制]

如何在文本文件中将输出复制到 bs4 中的终端

如何在 Pycharm 终端中使用 python-evtx 库运行脚本? [复制]

如何在 Python 3 中以纳秒为单位获取时间戳? [复制]