Python Windows上的pyinstaller与--noconsole简单地赢得了';行不通
我有一个相当简单的GUI(wxPython)应用程序,工作得很好。我正在使用Windows 7。Python Windows上的pyinstaller与--noconsole简单地赢得了';行不通,python,windows,wxpython,pyinstaller,Python,Windows,Wxpython,Pyinstaller,我有一个相当简单的GUI(wxPython)应用程序,工作得很好。我正在使用Windows 7。 当使用pyinstaller和-w(或-noconsole或-windowed)编译它并运行它时,我可以看到控制台窗口一毫秒,然后它关闭。GUI应用程序将不会运行。 不使用-w编译将生成一个带有控制台窗口的工作应用程序 我在这里遗漏了什么?我猜您不知怎么启动了一个子流程,当Python在没有控制台窗口的情况下运行时,该子流程会变得一团糟。我必须解决与此相关的三个问题: 多处理模块在生成辅助进程时需要
当使用
pyinstaller
和-w
(或-noconsole
或-windowed
)编译它并运行它时,我可以看到控制台窗口一毫秒,然后它关闭。GUI应用程序将不会运行。不使用-w编译将生成一个带有控制台窗口的工作应用程序
我在这里遗漏了什么?我猜您不知怎么启动了一个子流程,当Python在没有控制台窗口的情况下运行时,该子流程会变得一团糟。我必须解决与此相关的三个问题:
多处理
模块在生成辅助进程时需要执行以下操作子流程
模块需要stdin
、stdout
和stderr
,因为没有为子流程继承设置标准文件句柄我也有同样的问题。使用以下函数而不是
subprocess.Popen()
:
返回类型与从Popen()
非常适合我的GUI应用程序。使用pyinstaller--noconsole打开窗口…尝试使用-clean选项。控制台闪烁一秒钟可能会显示错误。尝试从命令提示符下运行生成的exe文件。已尝试使用相同的结果。hmmm。您可能想尝试使用py2exe,看看结果是否相同。我发现第2点起了作用——显式处理stdin、stdout和stderr。我们在子流程中只处理了stdout和stderr,但一旦处理了stdin,它就工作得很好。几年后,我发现了这一点,并且#2也解决了我的问题。谢谢Leon你的密码帮我解决了问题。非常感谢!
def popen(cmd):
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
process = subprocess.Popen(cmd, startupinfo=startupinfo, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
return process.stdout.read()