Python:如何窥视pty对象以避免阻塞?

前端之家收集整理的这篇文章主要介绍了Python:如何窥视pty对象以避免阻塞?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用pty来读取非阻塞这样的进程的stdout:

  1. import os
  2. import pty
  3. import subprocess
  4. master,slave = pty.openpty()
  5. p = subprocess.Popen(cmd,stdout = slave)
  6. stdout = os.fdopen(master)
  7. while True:
  8. if p.poll() != None:
  9. break
  10. print stdout.readline()
  11. stdout.close()

除了while循环偶尔阻塞外,一切正常.这是因为行打印stdout.readline()正在等待从stdout读取的内容.但如果该程序已经终止,我的小脚本将永远挂起.

我的问题是:有没有办法窥视stdout对象并检查是否有可读取的数据?如果不是这种情况,它应该继续通过while循环,它将发现该进程实际上已经终止并打破了循环.

最佳答案
是的,使用select module’s poll

  1. import select
  2. q = select.poll()
  3. q.register(stdout,select.POLLIN)

并在使用时:

  1. l = q.poll(0)
  2. if not l:
  3. pass # no input
  4. else:
  5. pass # there is some input

猜你在找的Python相关文章