首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python subprocess.Popen怎么能看到select.poll然后呢?(选择'module'对象没有属性'poll')

在Python中,subprocess.Popen是一个用于创建子进程的模块。它允许你执行外部命令并与其进行交互。然而,subprocess.Popen并不直接支持select.poll方法。

select.poll是一个用于I/O多路复用的对象,它允许你监视多个文件描述符的状态变化。它通常与非阻塞I/O一起使用,以实现高效的并发处理。

如果你想在使用subprocess.Popen时使用select.poll,你可以通过以下步骤实现:

  1. 首先,导入subprocessselect模块:
代码语言:python
代码运行次数:0
复制
import subprocess
import select
  1. 创建一个subprocess.Popen对象,启动外部命令:
代码语言:python
代码运行次数:0
复制
process = subprocess.Popen(['command', 'arg1', 'arg2'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

这里的command是你要执行的外部命令,arg1arg2是命令的参数。stdout=subprocess.PIPEstderr=subprocess.PIPE参数用于捕获命令的输出。

  1. 使用select.poll来监视子进程的输出:
代码语言:python
代码运行次数:0
复制
poller = select.poll()
poller.register(process.stdout, select.POLLIN)
poller.register(process.stderr, select.POLLIN)

这里,我们使用poller.register方法注册子进程的标准输出和标准错误输出。select.POLLIN表示我们要监视文件描述符是否可读。

  1. 使用poller.poll方法来检查文件描述符的状态变化:
代码语言:python
代码运行次数:0
复制
while True:
    events = poller.poll()
    for fd, event in events:
        if fd == process.stdout.fileno():
            # 处理标准输出
            output = process.stdout.readline()
            print(output)
        elif fd == process.stderr.fileno():
            # 处理标准错误输出
            error = process.stderr.readline()
            print(error)

在这个循环中,poller.poll方法会阻塞,直到有文件描述符的状态发生变化。然后,我们可以根据文件描述符的值来处理标准输出和标准错误输出。

需要注意的是,使用select.poll来监视子进程的输出需要在子进程执行期间进行。一旦子进程执行完毕,你就无法再使用select.poll来监视其输出。

希望这个回答能够帮助到你。如果你对云计算或其他相关主题有更多问题,欢迎继续提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券