Python 从stdout读取Popen需要很长时间
我试图从shell命令(npm--version)捕获输出,但是只读取第一行,并且进程没有结束Python 从stdout读取Popen需要很长时间,python,popen,Python,Popen,我试图从shell命令(npm--version)捕获输出,但是只读取第一行,并且进程没有结束 import subprocess proc = subprocess.Popen(['npm', '--version'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) proc.wait() for line in proc.stdout: print(line.decode("utf-8").strip())
import subprocess
proc = subprocess.Popen(['npm', '--version'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
proc.wait()
for line in proc.stdout:
print(line.decode("utf-8").strip())
print("does not get here?!")
你知道我怎么能发现这个过程的结束吗
如果我打开一个cmd并执行'npm--version',它会像预期的那样结束,所以我不知道为什么上面的操作没有结束
import subprocess
proc = subprocess.Popen(['npm', '--version'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
proc.wait()
for line in proc.stdout:
print(line.decode("utf-8").strip())
print("does not get here?!")
一些可能有用的额外信息
- npm通过nvm安装
- 这用于通过符号链接管理节点安装
- 我看到的npm是一个执行node的.cmd文件
>>> import subprocess
>>> proc = subprocess.Popen(['npm', '--version'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
>>> proc.wait()
0
>>> proc.stdout.readline()
'6.10.3\n'
>>> proc.stdout.readline()
''
现在,第二个.readline()需要很长时间才能完成 在popen.wait()中使用stdout=PIPE和/或stderr=PIPE将导致死锁。尝试使用communicate()来避免这种情况。 这是由于其他操作系统管道缓冲区填满并阻塞了子进程。 有关如何使用communicate()的信息,请参阅本文档
希望我能帮忙 请在命令提示符下手动键入时共享控制台输出 您共享的代码在我的机器上运行,我认为它可能与npm的安装方式有关。在任何情况下,您都可以共享命令控制台的输出 谢谢
Pushpa尝试为Popen()添加shell=True。据我所知,npm是windows中的bat文件。它已经有了(向右滚动),不放置它会导致文件未找到错误。您是否也可以使用:Add close_fds=True来调用subprocess。Popen()close_fds对此问题没有影响。npm是通过nvm安装的,我还怀疑这可能是我的问题的原因常规安装的npm(通过节点安装程序)按预期工作