If I save my code files as .pyw
, no console window appears - which is what I want - but if the code includes a call to os.system
, I still get a pes
You should use subprocess.Popen class passing as startupinfo
parameter's value instance of subprocess.STARTUPINFO class with dwFlags
attribute holding subprocess.STARTF_USESHOWWINDOW flag and wShowWindow
attribute holding subprocess.SW_HIDE flag. This can be inferred from reading lines 866-868 of subprocess.py
source code. It might be necessary to also pass subprocess.CREATE_NEW_CONSOLE flag as a value of creationflags parameter as you run under pythonw.exe
which does not open a console.
When you use shell=True
it just happens that all of the above is set correctly but that doesn't mean it's a proper solution. I would argue it's not because it adds overhead of running command interpreter and parsing arguments. In addition you should keep in mind that (...) the use of shell=True is strongly discouraged in cases where the command string is constructed from external input according to documentation of subprocess module.