Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 478
GuyC Avatar asked Sep 19 '25 14:09

GuyC


2 Answers

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...

like image 157
TheClockTwister Avatar answered Sep 22 '25 05:09

TheClockTwister


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.
like image 34
Don Kirkby Avatar answered Sep 22 '25 03:09

Don Kirkby