subprocess 非阻塞方式读取输出
时间: 2023-11-25 11:05:56 浏览: 36
在 Python 中,可以使用 `subprocess.Popen()` 函数启动一个子进程,并使用 `communicate()` 方法来等待子进程完成,并获取子进程的输出。但是,如果希望以非阻塞的方式读取子进程的输出,可以使用如下方法:
```python
import subprocess
# 启动子进程
p = subprocess.Popen("command", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 非阻塞方式读取子进程的标准输出和标准错误
while True:
# 检查子进程是否完成
if p.poll() is not None:
break
# 读取子进程的输出
output = p.stdout.readline()
if output:
print(output.decode('utf-8').strip())
# 读取子进程的错误输出
error = p.stderr.readline()
if error:
print(error.decode('utf-8').strip())
```
在上面的代码中,`subprocess.Popen()` 函数启动一个子进程,并将其标准输出和标准错误重定向到 `subprocess.PIPE`。然后,使用一个循环来非阻塞地读取子进程的输出,直到子进程完成。在循环中,使用 `p.poll()` 函数检查子进程是否完成,如果完成则退出循环。然后,使用 `p.stdout.readline()` 和 `p.stderr.readline()` 函数读取子进程的标准输出和标准错误输出,并使用 `decode()` 函数将其转换成字符串。最后,使用 `strip()` 函数去除字符串中的空格和换行符,并将其打印出来。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![xlsx](https://img-home.csdnimg.cn/images/20210720083732.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)