我正在使用readline()函数从通过子进程模块获取的文件对象中读取数据:proc = subprocess.Popen(cmd, bufsize=0, stdout=subprocess.PIPE)
。这允许我使用proc.stdout
作为proc.stdout.readline()
的文件类对象。我的问题是,这暂停等待输入,并且如果在进行readline调用时没有输入,我希望它超时并继续前进。我正在运行Python 2.4,我怎样才能让readline方法停止暂停?谢谢。试图调用python中的文件对象的readline(),但它正在暂停
2
A
回答
3
在posix-y平台(基本上除Windows之外的任何流行平台)上,select模块都为此提供了正确的工具。不幸的是,在Windows上,select
仅适用于套接字(不在管道上,这是subprocess.Popen
将使用的套接字),所以情况在那里不太清楚。你需要在Windows上运行...?
如果没有,只需使用子过程对象p
中的p.stdout.fileno()
调用select.select
并使用短暂超时 - 这非常简单!
编辑:这里有一个简单的例子(假设当然需要进口):
>>> def f():
... p = subprocess.Popen("sleep 10; echo ciao", shell=True, stdout=subprocess.PIPE)
... while True:
... r, w, x = select.select([p.stdout.fileno()],[],[],1.0)
... if r: return p.stdout.read()
... print 'not ready yet'
...
>>> f()
not ready yet
not ready yet
not ready yet
not ready yet
not ready yet
not ready yet
not ready yet
not ready yet
not ready yet
not ready yet
'ciao\n'
>>>
注意有没有办法“等整条生产线”:此等待“任何输出“(然后阻塞,直到所有输出准备就绪)。要阅读可用内容,请在开始循环之前使用fcntl在文件描述符上设置os.O_NODELAY(返回值为fileno()
)。
相关问题
- 1. 暂停的readline
- 2. 在测试时避免由于readline()造成的暂停
- 3. 在使用java中的readLine读取后删除暂停
- 4. Xcode在调试器中暂停时有错误的调试值
- 5. 批处理文件,调用一个暂停它的exe文件,如何跳过?
- 6. Javascript调试:单击事件暂停
- 7. python脚本暂停,如何禁用它?
- 8. 调试暂停在'mobdebug.start():1'(无法激活文件)
- 9. QTextStream stdin readline不会暂停输入
- 10. 调用pkill以暂停Python中的类中的子进程的进程暂停python脚本
- 11. 调试器的NodeJS暂停螺纹
- 12. 在Python中暂停循环
- 13. 在Python中暂停执行
- 14. IntelliJ - 在调试时暂停线程
- 15. 在调试点暂停程序?
- 16. 在Chrome DevTools中,阻止调试器在某些文件中暂停
- 17. 试图在Python脚本中复制文件,但它不起作用
- 18. 在chrome中的调试器中暂停了吗?
- 19. 如何暂停Windows控制台程序正在调试
- 20. 试图从java调用python文件
- 21. 暂停调用-SQLcmd查询 - 正在使用的数据库
- 22. AVQueuePlayer正在暂停,但播放图标不会消失
- 23. 暂停exe文件
- 24. 我试图纠正这一Django的对象设置错误,但它未能
- 25. 对话暂停调用活动?
- 26. 暂停它的动画时
- 27. 如何暂停更改但在Mercurial中跟踪文件?
- 28. 拆分音频文件,但只能在暂停中
- 29. 其中有“暂停”,在运行多个BAT文件,它
- 30. 如何在Node.js/V8中调试/分析极长的GC暂停
不,这是运行在CentOS 5.5 – Anon 2010-08-06 17:39:46
@William,那么我的第二段应该给你“王国的关键”;-)。你需要一些示例代码来帮助你进一步......? – 2010-08-06 17:41:34
你可以吗?我会很感激,谢谢。 – Anon 2010-08-06 17:42:41