【发布时间】:2018-05-30 03:40:36
【问题描述】:
我试图隐藏从 EXE 文件中弹出的控制台窗口。我正在从我自己的 EXE(通过 PyInstaller 冻结的 Python 脚本)运行这个 EXE。
我发现,每当我通过 IDLE 或 PyCharm 运行脚本时,我都可以隐藏控制台窗口,一切正常。但是如果我把我的脚本变成一个 EXE(使用pyinstaller --onefile),那么它就不起作用了。
我尝试了几乎所有 Google 和 SO 对有关此问题的搜索的响应,但我仍然不知道如果将我的脚本转换为 EXE 文件并运行它,我该如何隐藏控制台窗口。
我尝试的最后一个:
import subprocess
import win32gui
import time
proc = subprocess.Popen(["MyExe.exe"])
# lets wait a bit to app to start
time.sleep(3)
def enumWindowFunc(hwnd, windowList):
""" win32gui.EnumWindows() callback """
text = win32gui.GetWindowText(hwnd)
className = win32gui.GetClassName(hwnd)
#print hwnd, text, className
if text.find("MyExe.exe") >= 0:
windowList.append((hwnd, text, className))
myWindows = []
# enumerate thru all top windows and get windows which are ours
win32gui.EnumWindows(enumWindowFunc, myWindows)
# now hide my windows, we can actually check process info from GetWindowThreadProcessId
# http://msdn.microsoft.com/en-us/library/ms633522(VS.85).aspx
for hwnd, text, className in myWindows:
win32gui.ShowWindow(hwnd, False)
# as our notepad is now hidden
# you will have to kill notepad in taskmanager to get past next line
proc.wait()
【问题讨论】:
-
你是如何执行这个弹出控制台窗口的文件的?
-
@zwer 只需双击它。
-
我的意思是代码本身,而不是你如何启动它。你能发布整个被执行的命令链吗?
-
@zwer 嗯,想尽办法隐藏CMD,所以没有固定代码,因为什么都试过了,主要是子进程模块。
-
您是否尝试过在您的子流程调用前加上
start /b?
标签: python windows python-3.5 windows-console