pyinstaller on Windows with --noconsole simply won't work

坚强是说给别人听的谎言 提交于 2020-06-24 10:25:47

问题


I have a fairly simple GUI (wxPython) app and is working great. I'm using Windows 7.
When compiling it using pyinstaller with -w (or --noconsole or --windowed) and run it, I can see a console window for a millisecond and then it shutdown. The GUI app won't run.
Compiling without the -w will produce a working app with a console window.

What am I missing here?


回答1:


I would guess that you are somehow launching a subprocess that gets messed up when Python runs without a console window. I have had to solve three problems related to this:

  1. The multiprocessing module needs to set an environment variable when it spawns worker processes.
  2. The subprocess module needs to explicitly handle stdin, stdout, and stderr, because the standard file handles aren't set for subprocesses to inherit.
  3. The subprocess creates a console window, unless you tell it not to.



回答2:


Had the same problem. Used the following function instead of subprocess.Popen():

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()

the return type is the same as you would get from Popen().communicate()[0] :) Works great with my GUI application. Windowed with pyinstaller --noconsole...



来源:https://stackoverflow.com/questions/24455337/pyinstaller-on-windows-with-noconsole-simply-wont-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!