Python Windows上的pyinstaller与--noconsole简单地赢得了';行不通

Python Windows上的pyinstaller与--noconsole简单地赢得了';行不通,python,windows,wxpython,pyinstaller,Python,Windows,Wxpython,Pyinstaller,我有一个相当简单的GUI(wxPython)应用程序,工作得很好。我正在使用Windows 7。 当使用pyinstaller和-w(或-noconsole或-windowed)编译它并运行它时,我可以看到控制台窗口一毫秒,然后它关闭。GUI应用程序将不会运行。 不使用-w编译将生成一个带有控制台窗口的工作应用程序 我在这里遗漏了什么?我猜您不知怎么启动了一个子流程,当Python在没有控制台窗口的情况下运行时,该子流程会变得一团糟。我必须解决与此相关的三个问题: 多处理模块在生成辅助进程时需要

我有一个相当简单的GUI(wxPython)应用程序,工作得很好。我正在使用Windows 7。
当使用
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()