How do I hide the console when I use os.system() or subprocess.call()? How do I hide the console when I use os.system() or subprocess.call()? python python

How do I hide the console when I use os.system() or subprocess.call()?


The process STARTUPINFO can hide the console window:

si = subprocess.STARTUPINFO()si.dwFlags |= subprocess.STARTF_USESHOWWINDOW#si.wShowWindow = subprocess.SW_HIDE # defaultsubprocess.call('taskkill /F /IM exename.exe', startupinfo=si)

Or set the creation flags to disable creating the window:

CREATE_NO_WINDOW = 0x08000000subprocess.call('taskkill /F /IM exename.exe', creationflags=CREATE_NO_WINDOW)

The above is still a console process with valid handles for console I/O (verified by calling GetFileType on the handles returned by GetStdHandle). It just has no window and doesn't inherit the parent's console, if any.

You can go a step farther by forcing the child to have no console at all:

DETACHED_PROCESS = 0x00000008subprocess.call('taskkill /F /IM exename.exe', creationflags=DETACHED_PROCESS)

In this case the child's standard handles (i.e. GetStdHandle) are 0, but you can set them to an open disk file or pipe such as subprocess.DEVNULL (3.3) or subprocess.PIPE.


Add the shell=True argument to the subprocess calls.

subprocess.call('taskkill /F /IM exename.exe', shell=True)

Or, if you don't need to wait for it, use subprocess.Popen rather than subprocess.call.

subprocess.Popen('taskkill /F /IM exename.exe', shell=True)


Just add:subprocess.call('powershell.exe taskkill /F /IM exename.exe', shell=True)