Python2 的subprocess.Popen代码在 Python3出错

Python2的代码:

p=subprocess.Popen([app,adds],stdin=subprocess.PIPE,stdout=subprocess.PIPE)
p.stdin.write(param)
results = pipe.stdout.readline().strip()

实现的效果是当执行p.stdin.write(param时),相当我执行:
app adds param,
app 指向一个独立的第三方程序,adds是这个第三方程序带的第一个参数,
param 是第三方程序带的第二个参数。
python2执行正常,results返回结果0.

Python3 我理解默认默认类型改成了bytes,所以对应改成如下代码:

p=subprocess.Popen([app,adds],stdin=subprocess.PIPE,stdout=subprocess.PIPE,text=True)
p.stdin.write(param)
results = pipe.stdout.readline().strip()

python3 就是无法得到结果,首先到 p.stdin.write(param),
并没有实现执行
app adds param的效果。应该是直接报错了。
然后到results就自动结束了,
请大家帮忙看看。

最佳答案

@PFinal南丞 Try 也抓不到错误。 找到问题点了, 3.8加上 bufsize=0 就正常了。

3周前 评论
讨论数量: 4

此外debug stdin/stdout状态完全不一样。

3周前 评论

可以先try: 看一下报错是什么, 其次 你把 text=true参数修改成 universal_newlines=True 试试

3周前 评论

@PFinal南丞 Try 也抓不到错误。 找到问题点了, 3.8加上 bufsize=0 就正常了。

3周前 评论

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