我有一个程序,这个程序运行后自动打印一段文字,然后进入死循环。
我写了一个python脚本,用subprocess去调用这个程序,想从子进程的stdout中read子进程打印的结果。但是脚本被阻塞住了,需要敲回车才能继续运行。
有什么办法可以不阻塞然后或者子程序打印的文本呢?
stdin
具体怎么操作呢?脚本所在的控制台stdin只能读吧?
@思麦儿: stdin就是用来交互的,比如你要执行的脚本里需要你输入Y/N
p = subprocess.Popen('python3',stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True)
p.stdin.write(XXXX)
@北方姆Q 我要调用的程序是死循环,需要在主进程敲回车而不是在子进程中敲回车,所以不是往子进程的stdin写数据
@思麦儿: 我给你的只是个例子
@北方姆Q 那大神你可有办法?
@思麦儿: 代码
没有理解为什么要在主进程敲回车,这个主进程不是你自己控制的吗?
我有一个循环打印的方法,不知道可不可行
def run_shell(command): # print command p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) while True: r = p.stdout.readline().strip().decode('utf-8') if r:
# print r yield r if p.poll() != None and not r: break
其实主要问题是因为stdout
主要是因为子进程的stdout需要等到子进程结束之后才会有输出,但不知道为什么,我通过stdin传了信息之后,主进程会在stdout readline处卡住,需要敲一下键盘子进程才会结束