请教一下在使用asyncio.create_subprocess_exec函数,读取程序输出内容的时遇到的问题

 在使用asyncio.create_subprocess_exec函数读取程序输出内容时用到了p.stdout.readline函数,但这似乎会阻塞我的程序,调试发现p.returncode属性一直为None导致了死循环,但是当加入一个等待时间后,程序就可以正常退出了

请教asyncio.create_subprocess_exec函数的问题

对于这个现象我的疑惑有两点:
1、当没有p.stdout.readline()时,程序可以正常退出,p.stdout.readline()为什么会影响p.returncode从而导致死循环。
2、针对上述问题,为什么加入一行await asyncio.sleep 后又能正常跳出循环。

最佳答案

经过摸索,我发现p.stdout.readline () 并不会影响 p.returncode,而是p.returncode本身存在问题,在程序结束后returncode并不会像我们期望的那样立刻从None变成0,而是会在await p.wait(),或者是 await asyncio.sleep(0.000001) 后得到正确的返回值,我无法更深入的对这一现象作出解释,可能是p.returncode存在的BUG。 基于上述描述,我的程序修改成如下写法,达到了我的目的,通过检测rst的是否是空字符来判断是否达到了eof file

1年前 评论
讨论数量: 1

经过摸索,我发现p.stdout.readline () 并不会影响 p.returncode,而是p.returncode本身存在问题,在程序结束后returncode并不会像我们期望的那样立刻从None变成0,而是会在await p.wait(),或者是 await asyncio.sleep(0.000001) 后得到正确的返回值,我无法更深入的对这一现象作出解释,可能是p.returncode存在的BUG。 基于上述描述,我的程序修改成如下写法,达到了我的目的,通过检测rst的是否是空字符来判断是否达到了eof file

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!