python Popen 获取输出,等待运行完成示例

Python中的subprocess模块允许我们在Python中创建新的进程,与外部进程进行交互并获取执行结果。其中,Popen()是最基本的函数之一,它可以启动一个子进程,并返回一个Popen对象,该对象可用于操作子进程。

下面是获取Popen输出、等待进程完成的一般步骤:

  1. 导入subprocess模块
    import subprocess

  2. 使用Popen启动子进程,以获取执行命令的输出
    process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
    在此示例中,我们使用了stdout=subprocess.PIPE将标准输出(stdout)捕获到管道中,也可以使用stderr=subprocess.PIPE捕获标准错误(stderr)到管道中。shell=True表示在shell下运行命令。

  3. 循环读取输出,直到进程完成
    while process.poll() is None:
    output = process.stdout.readline().rstrip().decode()
    if output:
    print(output)

    在此示例中,我们使用了poll()来检查子进程是否完成。我们将循环读取由管道传输的所有输出,直到子进程完成输出后返回None

  4. 调用wait()等待进程完成
    process.wait()
    在此示例中,我们使用wait()来阻塞当前进程,等待子进程完成。

下面是获取Popen输出、等待进程完成的两个示例说明:

示例1:执行简单的shell命令

在此示例中,我们使用Popen执行ls命令,并捕获标准输出,等待该进程完成并输出结果。

import subprocess

command = 'ls /'
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)

while process.poll() is None:
    output = process.stdout.readline().rstrip().decode()
    if output:
        print(output)

process.wait()

其中,ls /是Linux/Mac下的命令,用于列出根目录下的所有文件和文件夹。在Windows下可以使用dir C:\代替。

示例2:执行Python脚本并获取输出

在此示例中,我们使用Popen执行一个Python脚本,并捕获标准输出,等待该进程完成并输出结果。

Python脚本示例(content.py)如下:

name = input("Please enter your name: ")
print("Hello, " + name + "!")

Python程序示例:

import subprocess

with open('output.log', 'w') as o:
    command = ['python', 'content.py']
    process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

    while process.poll() is None:
        output = process.stdout.readline().decode()
        if output:
            o.write(output)
            print(output)

    process.wait()

在此示例中,我们使用了with open()来打开一个文件o,将程序运行输出保存在该文件中。

在命令行下执行python program.py后,程序将等待用户输入姓名,并输出信息“Hello, ____!”。在本例中,我们使用Popen执行程序,并从标准输出中获取输出结果,并将其输出到文件output.log和控制台。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python Popen 获取输出,等待运行完成示例 - Python技术站

(0)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • python with提前退出遇到的坑与解决方案

    以下是“Python with提前退出遇到的坑与解决方案”的完整攻略,其中包括了with语句的使用方法、提前退出遇到的坑以及解决方案。同时,我们也提供了两个示例来说明如何使用with语句。 Python with提前退出遇到的坑与解决方案 在Python中,with语句是一种用于简化资源管理的语法结构。它可以自动管理资源的分配和释放,免了手动管理资源的琐和容…

    python 2023年5月13日
    00
  • python验证码识别实例代码

    让我们来讲解一下“Python验证码识别实例代码”的完整攻略。 什么是验证码? 首先,我们需要了解什么是验证码。验证码是用来区分人和计算机程序的一种验证方式,一般用于防止恶意程序的自动化操作。在网站中,常用的验证码有数字、字母、汉字或图形等形式。 Python验证码识别实例代码的思路 对于识别验证码的问题,我们可以使用常见的图像处理和机器学习算法来解决。这里…

    python 2023年6月6日
    00
  • Python 字典一个键对应多个值的方法

    下面是对“Python字典一个键对应多个值的方法”的详细解释和示例说明: 方法一:使用列表存储多个值 可以使用列表作为字典中一个键对应的多个值。具体实现方法是,在初始化字典时,将每个键(key)对应的值(value)设为一个空列表([]),当需要往字典中添加一个新的键值时,将新的值直接追加到该键对应的列表中。 示例代码如下: dict_1 = {‘key1’…

    python 2023年5月13日
    00
  • opencv python简易文档之图片基本操作指南

    Opencv Python简易文档之图片基本操作指南 本文旨在介绍使用Opencv Python库进行图片处理的基础操作,通过代码实现图片灰度转换、图像缩放、图像平移等基本操作。主要内容包括以下几个方面: 图片读取 图片处理 图片显示 图片读取 Opencv Python库的imread()函数用于读取图片,其参数为文件路径,可读取多种格式的图片文件,如.p…

    python 2023年5月18日
    00
  • Python中的 any() 函数和 all() 函数

    当然,我很乐意为您提供“Python中的any()函数和all()函数”的完整攻略。以下是详细的步骤和示例: Python中的any()函数和all()函数 Python中的any()函数和all()都用于判断可迭代对象中的元素是否为True。它们都返回一个布尔值,any()函数返回True,如果可迭代对象中至有一个元素为True,否则返回False。而al…

    python 2023年5月13日
    00
  • 对python的输出和输出格式详解

    对Python的输出和输出格式详解 在Python中,输出的内容可以使用print()函数实现,同时我们也可以使用格式化字符串来格式化输出内容。 使用print()函数输出内容 使用print()函数可以实现在控制台中输出内容。例如,输出字符串、整数等类型的数据: print("Hello, World!") # 输出字符串 print(…

    python 2023年6月5日
    00
  • python实现模拟按键,自动翻页看u17漫画

    Python实现模拟按键,自动翻页看U17漫画攻略 在本攻略中,我们将使用Python来模拟按键操作以实现自动翻页,以方便我们观看U17漫画。 准备工作 在开始之前,我们需要先安装一个Python包,名为keyboard。使用以下命令可以通过pip来安装: pip install keyboard 安装完成后,我们就可以使用keyboard包来模拟按键操作了…

    python 2023年5月19日
    00
  • 学python需要去培训机构吗

    学习Python不一定需要去培训机构,但是如果你是完全没有编程经验的初学者,或者想要迅速掌握Python编程技能,那么参加培训机构的课程可能会更有帮助。 以下是学习Python的完整攻略: 1. 了解基础知识 在学习任何一门编程语言之前,了解一些计算机科学的基础知识是非常重要的。比如,计算机是如何处理数据,计算机操作系统是什么,程序是如何运行的等。建议初学者…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部