`subprocess`模块允许你启动新的应用程序,连接到它们的输入/输出/错误管道,并获取它们的返回码。

本文涉及的产品
函数计算FC,每月15万CU 3个月
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
简介: `subprocess`模块允许你启动新的应用程序,连接到它们的输入/输出/错误管道,并获取它们的返回码。

一、subprocess模块概述

subprocess模块允许你启动新的应用程序,连接到它们的输入/输出/错误管道,并获取它们的返回码。这个模块提供了一个高级接口来创建和管理子进程,并收集它们的输出。

二、subprocess.run()方法

subprocess.run()是一个高级函数,用于运行命令并等待完成,然后返回一个CompletedProcess实例。

示例代码

import subprocess

result = subprocess.run(["ls", "-l"], capture_output=True, text=True)

print("Return code:", result.returncode)
print("Output:", result.stdout)
print("Error:", result.stderr)

解释

  • 我们首先导入了subprocess模块。
  • 使用subprocess.run()方法运行了ls -l命令(在Unix/Linux系统上列出当前目录的内容)。
  • capture_output=True参数告诉run()方法捕获命令的输出。
  • text=True参数确保输出作为字符串返回,而不是字节串。
  • result是一个CompletedProcess实例,它包含了命令的返回码、标准输出和标准错误输出。

三、subprocess.Popen()方法

subprocess.Popen()是一个更底层的函数,用于启动子进程,并返回一个Popen对象,你可以使用这个对象与进程交互。

示例代码

import subprocess

process = subprocess.Popen(["ping", "-c", "4", "www.google.com"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

stdout, stderr = process.communicate()

print("Return code:", process.returncode)
print("Output:", stdout)
print("Error:", stderr)

解释

  • 我们使用subprocess.Popen()方法启动了一个ping命令,该命令向www.google.com发送了4个ICMP回显请求。
  • stdout=subprocess.PIPEstderr=subprocess.PIPE参数告诉Popen()方法我们想要捕获命令的标准输出和标准错误输出。
  • text=True参数确保输出作为字符串返回。
  • process是一个Popen对象,它代表了我们启动的子进程。
  • 我们使用process.communicate()方法等待进程完成,并获取其标准输出和标准错误输出。这个方法会阻塞,直到进程完成。
  • 最后,我们打印了进程的返回码、标准输出和标准错误输出。

四、communicate()方法

communicate()Popen对象的一个方法,用于与进程交互。你可以向进程发送输入,并获取其输出。但是,请注意,你只能调用communicate()方法一次,因为进程的标准输入、标准输出和标准错误输出管道在调用后会被关闭。

示例代码(向进程发送输入)

import subprocess

process = subprocess.Popen(["cat"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True)

input_data = "Hello, subprocess!\n"
stdout, stderr = process.communicate(input=input_data)

print("Return code:", process.returncode)
print("Output:", stdout)

解释

  • 我们使用subprocess.Popen()方法启动了一个cat命令,该命令通常用于显示文件的内容。但是在这里,我们没有指定要显示的文件,所以它会等待从标准输入读取数据。
  • 我们通过communicate(input=input_data)方法向进程发送了输入数据。注意,这里的输入数据是一个字符串,末尾有一个换行符,因为cat命令期望以换行符结束输入。
  • 我们再次使用communicate()方法获取进程的标准输出。但是这次我们没有向进程发送任何输入(因为input参数是可选的,并且默认为None)。
  • 最后,我们打印了进程的返回码和标准输出。

五、总结

subprocess模块是Python中用于创建和管理子进程的一个强大工具。它提供了run()Popen()两个主要函数,以及许多其他辅助函数和类。run()函数是一个高级函数,用于运行命令并等待其完成。而Popen()函数则更底层,它允许你更精细地控制子进程的行为。communicate()方法是Popen对象的一个方法,用于与进程交互。通过组合使用这些函数和方法,你可以轻松地启动新的
处理结果:

一、subprocess模块概述

subprocess模块允许你启动新的应用程序,连接到它们的输入输出错误管道,并获取它们的返回码。这个模块提供了一个高级接口来创建和管理子进程,并收集它们的输出。

二、subprocess.run()方法

subprocess.run()是一个高级函数,用于运行命令并等待完成,然后返回一个CompletedProcess实例。
示例代码
```python
result = subprocess.run(["ls", "-l"], captureoutput=True, text=True)
print("Return code
", result.returncode)

  • 我们首先导入了subprocess模块。

    三、subprocess.Popen()方法

    subprocess.Popen()是一个更底层的函数,用于启动子进程,并返回一个Popen对象,你可以使用这个对象与进程交互。
    示例代码
    ```python
    process = subprocess.Popen(["ping", "-c", "4", "www.google.com"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
    stdout, stderr = process.communicate()
    print("Return code_", process.returncode)
  • 我们使用subprocess.Popen()方法启动了一个ping命令,该命令向www.google.com发送了4个ICMP回显请求。

    四、communicate()方法

    communicate()Popen对象的一个方法,用于与进程交互。你可以向进程发送输入,并获取其输出。但是,请注意,你只能调用communicate()方法一次,因为进程的标准输入、标准输出和标准错误输出管道在调用后会被关闭。
    示例代码(向进程发送输入)
    ```python
    process = subprocess.Popen(["cat"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True)
    inputdata = "Hello, subprocess!\n"
    print("Return code
    ", process.returncode)
  • 我们使用subprocess.Popen()方法启动了一个cat命令,该命令通常用于显示文件的内容。但是在这里,我们没有指定要显示的文件,所以它会等待从标准输入读取数据。

    五、总结

    subprocess模块是Python中用于创建和管理子进程的一个强大工具。它提供了run()Popen()两个主要函数,以及许多其他辅助函数和类。run()函数是一个高级函数,用于运行命令并等待其完成。而Popen()函数则更底层,它允许你更精细地控制子进程的行为。communicate()方法是Popen对象的一个方法,用于与进程交互。通过组合使用这些函数和方法,你可以轻松地启动新的
相关文章
|
6月前
|
存储 Shell Linux
当你打开终端并输入命令时会发生什么?(下)
当你打开终端并输入命令时会发生什么?(下)
|
2月前
|
网络协议 API Windows
MASM32v11编程调用Process32First失败: 程序发出命令,但命令长度不正确
MASM32v11编程调用Process32First失败: 程序发出命令,但命令长度不正确
|
4月前
|
Unix Linux Python
`subprocess`模块是Python中用于生成新进程、连接到它们的输入/输出/错误管道,并获取它们的返回(退出)代码的模块。
`subprocess`模块是Python中用于生成新进程、连接到它们的输入/输出/错误管道,并获取它们的返回(退出)代码的模块。
|
6月前
|
容器
这个错误是因为在读取文件时,管道已经结束
【1月更文挑战第14天】【1月更文挑战第67篇】这个错误是因为在读取文件时,管道已经结束
108 4
|
6月前
|
存储 网络协议 Unix
当你打开终端并输入命令时会发生什么?(上)
当你打开终端并输入命令时会发生什么?(上)
|
人工智能 自然语言处理 前端开发
Network可以显示后台返回的数据,但是打印出来时是undefind
Network可以显示后台返回的数据,但是打印出来时是undefind
105 0
|
存储 缓存 安全
PHP的passthru() 函数:执行一个命令,并将输出直接发送到输出缓冲区,缓冲区是干什么的?为什么要发送到缓冲区?
PHP的passthru() 函数:执行一个命令,并将输出直接发送到输出缓冲区,缓冲区是干什么的?为什么要发送到缓冲区?
342 0
根据用户输入的参数自动读取对应时间内的wrf模式输出数据
根据用户输入的参数自动读取对应时间内的wrf模式输出数据
|
C++ Python
Pytest----如何捕获标准输出和标准错误输出
Pytest----如何捕获标准输出和标准错误输出
1379 0
|
Python
Python 套接字-判断socket服务端有没有关闭的方法实例演示,查看socket运行状态
Python 套接字-判断socket服务端有没有关闭的方法实例演示,查看socket运行状态
580 0
Python 套接字-判断socket服务端有没有关闭的方法实例演示,查看socket运行状态