相关疑难解决方法(0)

python中subprocess.PIPE上的非阻塞读取

我正在使用子进程模块启动子进程并连接到它的输出流(stdout).我希望能够在其标准输出上执行非阻塞读取.有没有办法让.readline非阻塞或在我调用之前检查流上是否有数据.readline?我希望这是可移植的,或至少在Windows和Linux下工作.

这是我现在如何做到的(.readline如果没有数据可用,则阻止它):

p = subprocess.Popen('myprogram.exe', stdout = subprocess.PIPE)
output_str = p.stdout.readline()
Run Code Online (Sandbox Code Playgroud)

python io subprocess nonblocking

477
推荐指数
15
解决办法
21万
查看次数

如何使用超时运行进程并在运行时仍然获得stdout

需要:

  1. X秒后超时,如果在进程正常结束之前达到超时,则终止进程(以及它打开的所有进程).
  2. 在运行时读取正在进行的输
  3. 使用产生输出的过程,不产生输出的过程,以及产生输出的过程,然后停止产生输出(例如卡住).
  4. 在Windows上运行.
  5. 在Python 3.5.2上运行.

Python 3子进程模块内置了超时,我也尝试使用计时器和使用线程实现超时,但它不能与输出一起使用.readline()阻止与否?readlines()肯定会在吐出所有输出之前等待进程结束,这不是我需要的(我需要继续).

我接近切换到node.js :-(

python subprocess timeout stdout python-3.x

5
推荐指数
1
解决办法
712
查看次数

标签 统计

python ×2

subprocess ×2

io ×1

nonblocking ×1

python-3.x ×1

stdout ×1

timeout ×1