使用pyinstaller后,运行subprocess.run()命令时程序冻结

时间:2018-12-11 13:43:41

标签: python subprocess exe pyinstaller

我正在使用pyinstaller构建我的Python工具。当我使用时:

pyinstaller --onefile start.py

我生成的start.exe可以正常工作,并且所有功能都可以使用,但是当我使用时:

pyinstaller --onefile --noconsole start.py

我的工具只会冻结此代码:

output = subprocess.run(["arp", "-a"], shell=True, stdout=subprocess.PIPE)
file.write(output.stdout.decode("utf-8"))

对于netstat和ipconfig等,我还有更多类似的东西。我无法找到为什么在打开控制台时可以正常工作,但是在关闭控制台时却无法正常工作。有人可以向我解释这是为什么,也许是一个例子。我对Python和Pyinstaller很陌生。

谢谢!

修改

将我的Python代码转换为.exe之后,“ arp -a”命令现在可以运行,但是当它到达时:

output = subprocess.Popen(["systeminfo"], shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
file.write(output.stdout.read().decode("utf-8"))

shell = True无关紧要。没有它,就没有它。

有人有什么建议吗?我有很多琐事,但是在我将pyinstaller与--noconsole命令一起使用后,它将无法正常工作。

1 个答案:

答案 0 :(得分:0)

我发现,在pyinstaller中使用--noconsole参数时,还需要包含“ stdin =”和“ stdout =”。

我的问题已通过以下代码解决:

output = subprocess.Popen(["arp", "-a"], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
file.write(output.stdout.read().decode("utf=8"))

我希望这会帮助遇到相同问题的其他人!

感谢@PedroLobito的帮助并找到了答案的一部分!