经验:如何让Python脚本开机自启且不显示控制台窗口

更新历史
20200208:

  1. 首次发布

最近用Python搞了一把Windows桌面壁纸自动更换1,却遇到了两个困扰:

  • 如何让Python脚本开机自启?
  • Python脚本开机自启后,会出现一个控制台窗口,看上去不太优雅。。。怎么解决?

针对以上两个困扰,我做了一些尝试,并成功地解决了问题。以下为解决办法。

注:本文针对的操作系统为Windows 10,不能保证对其他版本的Windows系统也有效。


Python脚本开机自启且不显示控制台窗口——基于.bat文件

假设需要开机自启的Python脚本文件的完整路径为D:\桌面背景自动更换\壁纸.py。创建一个.txt文件(设文件名为:开机自启.txt),用记事本打开,添加以下内容2

D:
cd D:\桌面背景自动更换
python 壁纸.py

由于壁纸.py的路径中带有中文(“桌面背景自动更换”、"壁纸"是中文),可能会导致后续生成的开机自启.bat运行出错,因此,开机自启.txt需要以ANSI编码保存3,如下图所示:

python tk 面板隐藏 python tkinter隐藏控制台_python

然后,将开机自启.txt的名称更改为开机自启.bat。最后,将开机自启.bat复制到Windows的启动目录(C:\Users\你的Windows账户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)下:

python tk 面板隐藏 python tkinter隐藏控制台_Python_02

该方法是有效的,但是:

  • 壁纸.py开机自动运行后,桌面上会有一个控制台窗口(关闭窗口,该python脚本就会停止运行),看上去不太优雅

为了让控制台窗口不会显示出来,我们需要在开机自启.bat的开头部分加入一些代码45,加完代码后,开机自启.bat中的内容如下:

@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
D:
cd D:\桌面背景自动更换
python 壁纸.py

双击开机自启.bat,可以发现壁纸.py运行正常。然而,电脑重启后,壁纸.py却没有成功运行,Windows弹出了一个"脚本运行错误"的提示窗口。革命尚未成功,那就继续求助万能的网友。。。经过尝试,发现只需将开机自启.bat中的%~nx0改成%~0,问题就解决了67。最终,开机自启.bat中的内容如下:

@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~0"" h",0)(window.close)&&exit
:begin
D:
cd D:\桌面背景自动更换
python 壁纸.py

这样,壁纸.py就能够开机自启且不会出现控制台窗口了。

现在,目的是达到了,但是当我们想让壁纸.py停止运行时,惊喜就出现了:该怎么关闭壁纸.py呢?别急,可以这么做:如下图所示,打开任务管理器,找到"Python",将它"结束任务"即可。

python tk 面板隐藏 python tkinter隐藏控制台_开机自启_03


附录: Python脚本开机自启的另一种方法——基于快捷方式

假设需要开机自启的Python脚本文件为壁纸.py,那么,只需为其创建快捷方式,再将快捷方式复制到Windows的启动目录(C:\Users\你的Windows账户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)下即可8

python tk 面板隐藏 python tkinter隐藏控制台_Windows_04

该方法亲测有效,但是:

  • 壁纸.py开机自动运行后,桌面上会有一个控制台窗口
  • 偶尔会出现问题:电脑开机后,壁纸.py这个文件没有被执行,而是被一个文本编辑器打开了。。。难道是要我看代码?o(╥﹏╥)o

鉴于该方法不是那么可靠,我虽然对其进行了描述,但并不推荐使用它。