如何从 subprocess.communicate() 在 python 中捕获流输出
时间: 2024-03-21 19:43:00 浏览: 50
在 Python 中,可以使用 `subprocess.Popen()` 和 `subprocess.communicate()` 来执行其他程序,并捕获程序的输出结果。
`subprocess.Popen()` 用于启动一个新进程,并返回一个 `Popen` 对象,该对象可以用于与新进程进行交互。在启动新进程后,可以使用 `communicate()` 方法从子进程的标准输出和标准错误流中捕获输出。
下面是一个简单的示例代码,演示如何使用 `subprocess.Popen()` 和 `subprocess.communicate()` 从子进程的输出中捕获流输出:
``` python
import subprocess
# 启动子进程
p = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 捕获标准输出和标准错误流
out, err = p.communicate()
# 打印输出结果
print('stdout:', out.decode('utf-8'))
print('stderr:', err.decode('utf-8'))
```
在上面的示例代码中,我们启动了一个 `ls -l` 命令,并将子进程的标准输出和标准错误流捕获到变量 `out` 和 `err` 中。然后,我们使用 `decode()` 方法将字节字符串转换为 Unicode 字符串,并打印输出结果。
注意,`communicate()` 方法会等待子进程完成,并返回一个元组 `(stdout_data, stderr_data)`,其中 `stdout_data` 和 `stderr_data` 分别表示子进程的标准输出和标准错误流。如果程序不产生任何输出,则 `stdout_data` 和 `stderr_data` 均为 `None`。
阅读全文