junjie0927 发表于 2020-6-4 17:01

subprocess.Popen读取stdout内容阻塞的问题

#test2.py

import sys,time
while True:
    line = sys.stdin.readline()
    time.sleep(50)
    if line:
      sys.stdout.write(line)
      sys.stdout.flush()
    time.sleep(1)

#run2.py
import shlex
import sys
from subprocess import *
shell_cmd = 'python C:/Users/Administrator/Desktop/test/subprocess/test2.py'
cmd = shlex.split(shell_cmd)
proc = Popen(cmd,stdin=PIPE,stdout=PIPE,stderr=STDOUT)

line = input('请输入:')
while line != 'q':
    proc.stdin.write(bytes(line,'utf-8'))
    proc.stdin.write(bytes("\n",'utf-8'))
    proc.stdin.flush()
    output = proc.stdout.readline()
    print(output.decode('utf-8'))
    #sys.stdout.write(output)
    sys.stdout.flush()
    line = input('请输入:')

我在test1.py里面加入的time.sleep(50)是为了测试run2.py里的out = proc.stdout.readline()是否会阻塞。

结果就是当管道里面没有内容的时候。
out = proc.stdout.readline()
就一直阻塞,一直到有内容读取的时候才下一步执行代码。
请问各位大神,有没有什么办法可以让out = proc.stdout.readline()不阻塞?

dazhuangzhuang 发表于 2020-6-5 09:53

本帖最后由 dazhuangzhuang 于 2020-6-5 09:59 编辑

看看这个是否对你有启发
子进程中的sys.stdin.read()永不返回
https://www.icode9.com/content-3-554706.html
页: [1]
查看完整版本: subprocess.Popen读取stdout内容阻塞的问题