Python 使用subprocess获取实时输出

Python 使用subprocess获取实时输出

在本文中,我们将介绍如何使用Python的subprocess模块实时获取程序的输出。

阅读更多:Python 教程

subprocess模块简介

subprocess模块是Python标准库中用于创建和管理子进程的模块。它提供了一个简单且灵活的接口,可以在不同平台上运行外部程序,并与其进行交互。

subprocess模块有很多函数和类可以使用,但在本文中,我们主要关注的是subprocess.Popen类。它提供了更高级的接口,可以实时获取子进程的输出。

使用subprocess.Popen实时获取输出

要使用subprocess来获取实时输出,我们需要创建一个subprocess.Popen对象,并通过其stdout参数来指定输出流。

下面是一个简单的例子,我们执行一个命令并实时获取其输出:

import subprocess

# 执行命令,并将输出实时打印出来
def execute_command(command):
    p = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
    while True:
        output = p.stdout.readline()
        if output == b'' and p.poll() is not None:
            break
        if output:
            print(output.strip().decode())
    return p.poll()

# 示例:执行ls命令并输出结果
execute_command('ls')

在上面的例子中,我们使用了subprocess的Popen类来创建了一个子进程,并将其stdout参数设置为subprocess.PIPE,以便实时获取输出流。

然后,我们通过循环不断读取输出流的内容,并将其打印出来。当输出流中没有内容可读取,并且子进程已经终止时,循环结束。

运行上面的代码,你会看到命令执行的结果会实时输出到控制台。

获取实时输出并保存到文件

有时候,我们可能希望将实时获取的输出保存到文件中,以便后续使用。为了实现这个目标,我们可以将输出流重定向到一个文件。

下面是一个示例代码,它执行一个命令并将其输出保存到一个文本文件中:

import subprocess

# 执行命令,并将输出保存到文件
def execute_command_and_save_output(command, output_file):
    with open(output_file, 'w') as f:
        p = subprocess.Popen(command, stdout=f, shell=True)
        p.wait()

# 示例:执行ls命令并将输出保存到output.txt文件中
execute_command_and_save_output('ls', 'output.txt')

在上面的例子中,我们使用了open函数创建了一个文件对象,并将其作为subprocess.Popen的stdout参数,以便将输出流重定向到文件中。

然后,我们通过p.wait()等待子进程执行完毕。

运行上面的代码,你会发现输出流中的内容被保存到了指定的文件中。

总结

本文介绍了如何使用Python的subprocess模块实时获取程序的输出。通过创建subprocess.Popen对象并指定stdout参数,我们可以实时获取子进程的输出,并进行处理。

希望本文对你理解如何使用subprocess模块获取实时输出有所帮助。如果你有任何问题,请随时提问。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程