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实现简单的聊天小程序

    下面是”python实现简单的聊天小程序”的完整攻略: 介绍 聊天小程序是一种允许用户实时交流的应用程序。Python是一种流行的编程语言,有许多库可以用来创建聊天小程序。在这份教程中,我们将介绍如何使用Python创建一个简单的聊天小程序。 步骤 1. 安装必要的库 使用Python创建聊天程序,需要使用socket, threading和tkinter库…

    python 2023年5月19日
    00
  • python中pip安装库时出现Read timed out解决办法

    以下是关于“Python中pip安装库时出现Readtimedout解决办法”的完整攻略: 问题描述 在使用 pip 安装库时,有时会出现 Readtimedout 错误,导致安装失败。本文将介绍如何解决这个问题。 解决方法 1. 更换 pip 源 有时候,pip 源可能会出现问题,导致安装失败。可以尝试更换 pip 源,使用国内的镜像源。示例如下: pip…

    python 2023年5月13日
    00
  • 浅谈Python3多线程之间的执行顺序问题

    浅谈 Python3 多线程之间的执行顺序问题 引言 在编写多线程程序时,一个常见的问题是线程之间的执行顺序问题。Python3 中的多线程编程有两个主要的模块:_thread 和 threading。这两个模块都具有控制线程执行顺序的方法。在本文中,我们将讨论这些方法,并通过示例说明它们的使用。本文假设读者已经具有Python3多线程编程的一些基础知识。 …

    python 2023年5月18日
    00
  • Numpy 数组索引的实现

    下面是“Numpy 数组索引的实现”的详细讲解攻略: 1. 索引方式 Numpy数组索引有两种方式: 基本索引 基本索引是指使用整数或切片(slice)来对数组进行索引,例如: import numpy as np a = np.array([[1, 2], [3, 4], [5, 6]]) print("a:\n", a) # 对数组a…

    python 2023年6月6日
    00
  • python字典DICT类型合并详解

    Python字典DICT类型合并详解 Python中,我们可以使用字典(dict)类型来处理键值对数据,本文将详细介绍字典的合并操作。 1. Python中字典合并的两种方式 方式一:“|”操作符 在Python 3.9及以上版本中,字典合并操作可以使用“|”操作符,例如: dict1 = {‘a’: 1, ‘b’: 2} dict2 = {‘c’: 3, …

    python 2023年5月13日
    00
  • 比较常用的几个正则表达式匹配数字(收藏)

    下面是详细的攻略: 比较常用的几个正则表达式匹配数字(收藏) 在Python中,我们可以使用正则表达式来匹配数字。本文将介绍几个常用的正则表达式,分别是匹配整数、匹配浮点数、匹配正整数和匹配负整数。 匹配整数的正则表达式 下面是匹配整数的正则表达式: pattern = r’^[-+]?[0-9]+$’ 上面的正则表达式可以匹配整数,包括正整数、负整数和零。…

    python 2023年5月14日
    00
  • Python操作Excel之xlsx文件

    下面我会详细讲解Python操作Excel之xlsx文件的完整实例教程,让你学会基本的Excel操作。 一、安装必要的库 在Python操作Excel之前,我们需要先安装两个必要的库:openpyxl和pandas。 1.1 安装openpyxl openpyxl是一个Python库,用于读取和写入Excel 2010 xlsx /xlsm /xltx /x…

    python 2023年5月13日
    00
  • Python实现CAN报文转换工具教程

    Python实现CAN报文转换工具教程 1. 简介 CAN(Controller Area Network)控制器局域网是一种高可靠性的串行通信协议。在汽车、工业自动化和机器人等领域得到广泛应用。本文将详细介绍如何使用Python实现CAN报文转换工具。 2. 硬件及软件环境 在实现CAN报文转换之前,我们需要准备相关的硬件和软件环境,其中主要包含以下几个方…

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