进程STARTUPINFO可以隐藏控制台窗口:
si = subprocess.STARTUPINFO()
si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
#si.wShowWindow = subprocess.SW_HIDE # default
subprocess.call('taskkill /F /IM exename.exe', startupinfo=si)
或者设置创建标志以禁用创建窗口:
CREATE_NO_WINDOW = 0x08000000
subprocess.call('taskkill /F /IM exename.exe', creationflags=CREATE_NO_WINDOW)
上面仍然是一个控制台进程,具有控制台I / O的有效句柄(通过在GetStdHandle返回的句柄上调用GetFileType来验证)。它只有没有窗口,并且不继承父级的控制台(如果有)。
你可以通过强迫孩子没有控制台更远一步:
DETACHED_PROCESS = 0x00000008
subprocess.call('taskkill /F /IM exename.exe', creationflags=DETACHED_PROCESS)
在这种情况下,子标准句柄(即GetStdHandle)为0,但您可以将其设置为打开的磁盘文件或管道,例如subprocess.DEVNULL(3.3)或subprocess.PIPE。