Python 2.6 popen如何实现非阻塞
时间: 2023-11-05 10:09:21 浏览: 209
Python中使用select模块实现非阻塞的IO
在Python 2.6中,您可以使用`select`模块来实现非阻塞的`popen`调用。 `select`模块允许您监视文件描述符的状态,以便在数据可用时读取输出。 下面是一个使用`select`模块实现非阻塞`popen`的示例代码:
```python
import subprocess
import select
# 启动进程并获取其输出文件句柄
process = subprocess.Popen(['command', 'arg1', 'arg2'], stdout=subprocess.PIPE)
# 设置输出文件句柄为非阻塞模式
fd = process.stdout.fileno()
flags = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, flags | os.O_NONBLOCK)
# 循环读取输出直到进程终止
while True:
# 使用select模块来检查输出文件句柄的状态
r, _, _ = select.select([process.stdout], [], [], 0.1)
if r:
# 如果输出文件句柄有数据可读,则读取该数据并打印出来
data = process.stdout.read()
print data
elif process.poll() is not None:
# 如果进程已经终止,则退出循环
break
```
在上面的代码中,我们首先启动了一个子进程,并将其输出文件句柄设置为非阻塞模式。然后,我们循环读取输出文件句柄,使用`select`模块来检查文件句柄的状态。当文件句柄有数据可读时,我们读取该数据并打印出来。如果进程已经终止,则退出循环。
阅读全文