【问题标题】:Hide console window by an .exe file executed by a .py script通过 .py 脚本执行的 .exe 文件隐藏控制台窗口
【发布时间】: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


【解决方案1】:

您可以在 Pyinstaller 中使用 -w 选项。

例如,

pyinstaller -F -w 文件名

您可以通过执行了解更多信息

pyinstaller -h

希望对你有帮助。

【讨论】:

  • 为什么这个答案有负分? pyinstaller 的 -w 选项覆盖了为标准 i/o 创建控制台的默认 -c 选项。这类似于 py2exe setup(console... vs setup(window...
【解决方案2】:

横向考虑,一个解决方案可能是从 Windows 的 Task Scheduler 应用程序* 运行您的应用程序并将任务设置为 Run whether user is logged on or not

Run whether user is logged on or not 设置会导致应用程序不可见地运行,这意味着屏幕上不会显示窗口、任务栏图标或控制台窗口。

* 任务计划程序默认安装在 Windows 中。在 Cortana 中输入其名称以运行

【讨论】:

    【解决方案3】:

    好的,我知道我来晚了。你可以使用--noconsole在pyinstaller中隐藏控制台窗口

    比如这样:

    python PyInstaller Filename.py --onefile --noconsole
    

    这将隐藏控制台窗口,程序将正常执行。

    【讨论】:

      【解决方案4】:

      如果您使用的是 spec 文件 - 将 console=False 添加到您的 EXE(...) 命令中:

      exe = EXE(pyz,
            ...
            console=False )
      

      【讨论】:

        猜你喜欢
        • 2013-12-27
        • 1970-01-01
        • 2017-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-22
        • 2012-10-14
        相关资源
        最近更新 更多