从stdout读取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())
print("does not get here?!")

你知道我怎样才能发现这个过程的结束吗?。

如果我打开一个cmd并执行"npm--version",它会按预期结束,所以我不知道为什么上面的操作没有结束。

一些可能有用的额外信息!。。。

  • npm是通过nvm安装的
  • 它用于通过符号链接管理节点安装
  • 我能看到的npm是一个.cmd文件,它执行node

在python命令提示符下运行此。。。

>>> import subprocess
>>> proc = subprocess.Popen(['npm', '--version'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
>>> proc.wait()
0
>>> proc.stdout.readline()
'6.10.3n'
>>> proc.stdout.readline()
''

现在,第二个.redline((需要很长时间才能完成!

在popen.wait((中使用stdout=PIPE和/或stderr=PIPE将导致死锁。尝试使用communicate((来避免这种情况。这是由于其他操作系统管道缓冲区填满并阻塞子进程。请参阅有关如何使用communication((的文档https://docs.python.org/2/library/subprocess.html

希望我能帮忙!

当您手动键入命令提示符时,能否共享控制台输出。

您共享的代码在我的机器上运行,我认为它可能与npm的安装方式有关。在任何情况下,您都可以共享命令控制台的输出。

谢谢Pushpa

最新更新