如何在python中隐藏控制台窗口?


Answers:


129

只需将其保存为.pyw扩展名即可。这将阻止控制台窗口打开。

在Windows系统上,没有“可执行模式”的概念。Python安装程序会自动将.py文件与python.exe关联,以便双击Python文件将其作为脚本运行。扩展名也可以是.pyw,在这种情况下,通常出现的控制台窗口将被隐藏。

2.2.2节底部的说明


2
该链接中没有2.2.2节。您为什么不在此处发布说明?
mcont


37

在linux中,只需运行它,就没问题。在Windows中,您要使用pythonw可执行文件。

更新资料

好的,如果我理解注释中的问题,那么您在问如何使从命令行启动机器人的命令窗口消失?

  • UNIX(Linux)

$ nohup mypythonprog和

  • 视窗

C:/>启动pythonw mypythonprog

认为是正确的。无论如何,现在您可以关闭终端。


那不是主要问题。主要问题是隐藏控制台窗口,然后程序正在运行。它是如何做到的?

您的意思是您要从中开始?
查理·马丁

1
将文件扩展名更改为.pyw以与pythonw.exe关联 oreilly.com/catalog/pythonwin32/chapter/ch20.html
mechanical_meat

“ nohup mypythonprog&”将在Linux中为我提供帮助……但是Windows计算机上不会安装python。所以我猜“启动pythonw mypythonprog”不会帮我。

2
噢,我明白。实际上,unix == UNIX,不要骚扰您的长辈。
查理·马丁

22

在Unix系统上(包括GNU / Linux,macOS和BSD)

使用nohup mypythonprog &,您可以关闭终端窗口而不会中断该过程。你也可以运行exit,如果你是在云中运行,并且不希望留下一个挂shell进程。

在Windows系统上

保存带有.pyw扩展名的程序,现在它将以打开pythonw.exe。没有外壳窗口。

例如,如果有foo.py,则需要将其重命名为foo.pyw


16

这将隐藏您的控制台。首先在代码中实现这些行,以便首先开始隐藏控制台。

import win32gui, win32con

the_program_to_hide = win32gui.GetForegroundWindow()
win32gui.ShowWindow(the_program_to_hide , win32con.SW_HIDE)

2020年5月更新:

如果您pip install win32con在命令提示符上遇到问题,可以简单地进行操作pip install pywin32。然后在python脚本上执行import win32.lib.win32con as win32con而不是import win32con

再次显示您的程序win32con.SW_SHOW可以正常工作:

win32gui.ShowWindow(the_program_to_hide , win32con.SW_SHOW)

1
请用英语解释您的代码。谢谢!不需要解释的人可以自己编写。
jpaugh

运行该终端时,终端将短暂弹出。
西蒙

这非常有帮助,我只是将其粘贴到我的代码中。
卡拉·库赛

1
如果我要停止该终端线怎么办?
卡伦·库赛

1
要再次显示隐藏的程序,请使用以下行:win32gui.ShowWindow(The_program_to_hide,win32con.SW_SHOW)
Mohsen Haddadi

11

如果您只想在安装了Python解释器的Windows计算机上运行Python脚本,则可以将保存的脚本的扩展名从“ .py”转换为“ .pyw”来解决。

但是,如果您使用py2exe将脚本转换为可以在任何Windows计算机上运行的独立应用程序,则需要对“ setup.py”文件进行以下更改。

以下示例是使用Tkinter制作的简单python-GUI:

from distutils.core import setup
import py2exe
setup (console = ['tkinter_example.pyw'],
       options = { 'py2exe' : {'packages':['Tkinter']}})

将上面代码中的“控制台”更改为“ windows”。

from distutils.core import setup
import py2exe
setup (windows = ['tkinter_example.pyw'],
       options = { 'py2exe' : {'packages':['Tkinter']}})

这只会打开Tkinter生成的GUI,而不会打开控制台窗口。


尽管我认为该答案与该问题有点偏离,但我继续将其发布,因为它回答了以下问题(下面的链接),该问题被标记为该问题的重复项。
John918 '16


我实际上正在使用pyinstaller,但是对于同一件事(-w)可以选择,并为我解决了该问题。
ChrisWue

4

一些其他信息。对于需要Mohsen Haddadi在此线程前面发布的win32gui解决方案的情况:

从python 361开始,win32gui和win32con不属于python std库。要使用它们,需要安装pywin32软件包。现在可以通过点子

有关pywin32软件包的更多背景信息,请参见如何在Python中使用win32gui模块?

同样,为了在关闭窗口时谨慎行事,以免无意中关闭前景中的任何窗口,可以按照以下方式扩展分辨率:

try     :

    import win32gui, win32con;

    frgrnd_wndw = win32gui.GetForegroundWindow();
    wndw_title  = win32gui.GetWindowText(frgrnd_wndw);
    if wndw_title.endswith("python.exe"):
        win32gui.ShowWindow(frgrnd_wndw, win32con.SW_HIDE);
    #endif
except  :
    pass

为什么不只使用扩展名* .pyw?这太长了。
匿名

2
在用例中,例如使用localhost上的Cgi服务器(http.server),使用.pyw扩展名可能不是解决方案。因为在这种情况下,尽管扩展名为.pyw,但python脚本最终还是被python.exe执行。
Snidhi Sofpro

运行该终端时,终端将短暂弹出。
西蒙

啊,但是如果您做这样的事情怎么办:import os,sys if sys.args[-1]!='Y': os.system('pythonw myprog.py Y') # or whatever your program's name is # Your program's code
匿名
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.