首页
学习
活动
专区
工具
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来监视其输出。

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

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

相关·内容

Python 自动化指南(繁琐工作自动化)第二版:十七、计时、安排任务和启动程序

这个timedelta对象的days属性存储11,它的seconds属性存储36548 (10 小时 9 分 8 秒,以秒表示) ➋。...如果你想从你的 Python 脚本中启动一个外部程序,将程序的文件名传递给subprocess.Popen()。(在 Windows 上,右击应用的开始菜单项,选择属性查看应用的文件名。...在 MacOS 上,按住CTRL点击应用并选择显示包内容找到可执行文件的路径。)然后Popen()函数将立即返回。请记住,启动的程序与 Python 程序不是在同一个线程中运行的。...现在wait()和poll()返回0,表示过程结束,没有错误。...你怎么能让你的程序暂停 5 秒钟? 函数round()返回什么? datetime对象和timedelta对象有什么区别?

2.7K20
  • python的subprocess模块

    那么我们如何通过Python来完成这些命令行指令的执行?...Traceback (most recent call last): File "", line 1, in File "/usr/lib/python3.4/subprocess.py...subprocess.Popen(): 在一些复杂场景中,我们需要将一个进程的执行输出作为另一个进程的输入。在另一些场景中,我们需要先进入到某个输入环境,然后再执行一系列的指令等。...才出现subprocess.run 终端输入的命令分为两种: 输入即可得到输出,如:ifconfig 输入进行某环境,依赖再输入,如:Python 常用subprocess 没有管道 retcode...()返回none表示还没有执行完,返回0表示执行完了 res.wait()等待结束然后返回0 terminate()杀掉该进程,res.terminate() wait() wait for child

    3K20

    python模块--subprocess

    代码中去执行一些系统命令,在执行python程序时,该模块会创建出一个子进程,来运行外部程序。     ... last):   File "C:/Users/Administrator/PycharmProjects/first/subprocess/check_call.py", line 7, in <module...1.Popen()创建的对象有多个方法,可以针对子进程执行个性化操作,例如: import subprocess import time time.clock() POPEN1 = subprocess.Popen... at 0x02230810> 0.06108553745727746 #从时间上看,主程序很快就结束了 Popen()创建的对象方法包括: POPEN1.poll() # 检查子进程状态 POPEN1....kill() # 终止子进程 POPEN1.terminate() # 终止子进程 POPEN1.send_signal() # 向子进程发送信号 pid属性包含了子进程的pid号     2.subprocess.Popen

    66910

    正确的使用python调用shell的姿势

    一方面shell脚本量变大就会比较难以工程化,维护和阅读,另外一个重要的原因是shell不具备正经编程语言所具备的丰富的一些类库,比如说map类型必须得bash版本4.x以上才有,或者有序list什么的也没有...popen方法可以获取命令执行后到输入结果,但这还是有缺陷的,我们知道在linux里面,有标准的0,1,2来代表标准输入,输出和错误,现在只有stdout没有其他的两个变量还是有限制的,如果仔细看python...当创建标准流的管道对象时使用,默认-1。...stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄 preexecfn:只在 Unix 平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用...,介绍: poll(): 检查进程是否终止,如果终止返回 returncode,否则返回 None。

    7.5K20

    Python 实现 IO 多路复用

    ,如:input accept recv 处理IO事件的时间消耗较长带来的阻塞,如:文件的读写过程,网络数据的发送过程 1.2 非阻塞IO 通过修改IO事件的属性,使其变为非阻塞状态,以避免条件阻塞的情况...python中实现IO多路复用: select poll epoll 2.1 select r,w,x = select(rlist,wlist,xlist,timeout):向内核发起IO...p = poll() 创建poll对象 常见的poll IO事件分类 POLLIN,被动等待处理的IO POLLOUT,主动处理的IO POLLERR,相当于xlist 使用按位或连接注册多种...() s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) s.bind(ADDR) s.listen(5) #创建poll对象 p = select.poll...s.close() 2.3 epoll 使用方法与poll基本相同,生成对象使用epoll()而不是poll(),register注册IO事件类型改为EPOLL事件类型: import socket

    65810

    python subprocess模块

    run()方法在python3.5才有,python2.x没有,2.x用subprocess.call(),当然python3.X版本也支持call() 常见的subprocess方法 subprocess.call...subprocess.getoutput("ls /bin/ls") 返回:'/bin/ls' 上边的subprocess方法,底层都是封装的subprocessPopen subprocess的其他解说: poll...,其他 缓冲区大小,负值 系统缓冲 stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄 preexec_fn:只在Unix平台下有效,用于指定一个可执行对象...,True -> 同意使用 \n startupinfo与createionflags只在windows下有效 将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性...import subprocess obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE

    1K20

    Python IO 操作详解

    ,如:input accept recv 处理IO事件的时间消耗较长带来的阻塞,如:文件的读写过程,网络数据的发送过程 1.2 非阻塞IO 通过修改IO事件的属性,使其变为非阻塞状态,以避免条件阻塞的情况...python中实现IO多路复用: select poll epoll 2.1 select r,w,x = select(rlist,wlist,xlist,timeout):向内核发起IO...p = poll() 创建poll对象 常见的poll IO事件分类 POLLIN,被动等待处理的IO POLLOUT,主动处理的IO POLLERR,相当于xlist 使用按位或连接注册多种...() s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) s.bind(ADDR) s.listen(5) #创建poll对象 p = select.poll...s.close() 2.3 epoll 使用方法与poll基本相同,生成对象使用epoll()而不是poll(),register注册IO事件类型改为EPOLL事件类型: import socket

    94720

    Python 执行系统命令

    Python 编程过程中经常会用到系统命令,本文记录实现方法。...其返回值是指令运行后返回的状态码,0表示指令成功执行,1表示失败,256表示没有返回结果,该方法适用于系统命令不需要输出内容的场景。...subprocess.Popen() 使用Popen可以创建进程,并与进程进行复杂的交互。 用法: child = subprocess.Popen(["cmd","arg1"...])...在另一些场景中,我们需要先进入到某个输入环境,然后再执行一系列的指令等。这个时候我们就需要使用到suprocess的Popen()方法。...Popen方法: 1、Popen.poll():用于检查子进程是否已经结束。设置并返回returncode属性。 2、Popen.wait():等待子进程结束。设置并返回returncode属性

    1.7K10

    【愚公系列】2021年12月 Python教学课程 26-系统编程

    那么我们如何通过 Python 来完成这些命令行指令的执行?...这时候,你最好进入 cmd 环境使用 python命令进入交互式界面才可以看到屏幕上的信息。 由于使用该函数经常会莫名其妙地出现错误,但是直接执行命令并没有问题,所以一般建议不要使用。...交互式输入 并不是所有的操作系统命令都像‘dir’或者‘ipconfig’那样单纯地返回执行结果,还有很多像‘python’这种交互式的命令,你要输入点什么,然后它返回执行的结果。...参考下面的使用方法, 在一个 1.txt 文件中写入 print(‘i like Python’),然后: import subprocess fd = open("d:\\1.txt") ret =...subprocess.Popen()类 用法和参数与 run()方法基本类同,但是它的返回值是一个 Popen 对象,而不是CompletedProcess 对象

    88320
    领券