我正在用Python编写IRC机器人。
我希望为Linux和Windows制作独立的二进制文件。主要是希望机器人启动时,控制台窗口应该隐藏并且用户不能看到该窗口。
我该怎么办?
Answers:
只需将其保存为.pyw
扩展名即可。这将阻止控制台窗口打开。
在Windows系统上,没有“可执行模式”的概念。Python安装程序会自动将.py文件与python.exe关联,以便双击Python文件将其作为脚本运行。扩展名也可以是.pyw,在这种情况下,通常出现的控制台窗口将被隐藏。
在linux中,只需运行它,就没问题。在Windows中,您要使用pythonw可执行文件。
好的,如果我理解注释中的问题,那么您在问如何使从命令行启动机器人的命令窗口消失?
$ nohup mypythonprog和
C:/>启动pythonw mypythonprog
我认为是正确的。无论如何,现在您可以关闭终端。
这将隐藏您的控制台。首先在代码中实现这些行,以便首先开始隐藏控制台。
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)
如果您只想在安装了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,而不会打开控制台窗口。
一些其他信息。对于需要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
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