如何后台运行Python脚本?pythonw.exe无效且遇PROTOCOL_TLS错误
问题解决:Python脚本后台运行及
PROTOCOL_TLS报错处理 咱们先从你遇到的NameError: name 'PROTOCOL_TLS' is not defined报错说起——这个问题的根源几乎可以确定是Python版本过低。PROTOCOL_TLS是Python 3.7及以上版本的ssl模块才新增的常量,如果你用的是3.6或更早的旧版本,就会触发这个错误。
解决PROTOCOL_TLS报错的两种方案
- 优先推荐:升级Python版本:Python 3.6及更早版本已经停止官方维护,不仅有安全风险,还会遇到很多新库的兼容性问题。直接升级到3.8以上的稳定版本,这个报错会自动消失。
- 临时 workaround(不推荐长期用):如果暂时没法升级,可以在脚本开头手动补全这个常量:
import ssl try: # 尝试获取高版本的PROTOCOL_TLS PROTOCOL_TLS = ssl.PROTOCOL_TLS except AttributeError: # 针对Python 3.6及以下版本,用TLSv1.2替代 PROTOCOL_TLS = ssl.PROTOCOL_TLSv1_2
关于pythonw.exe运行无反应的问题
pythonw.exe确实是Windows下后台运行Python脚本的官方工具,它不会弹出控制台窗口,但运行后没反应通常是这几个原因:
- 脚本本身有错误:因为pythonw不输出控制台信息,脚本出错你也看不到。先确保用
python.exe能正常跑通脚本(先解决上面的报错),再试pythonw。 - 脚本执行太快直接退出:如果脚本逻辑很快就执行完,你自然看不到任何痕迹。可以在脚本末尾加一段延迟验证:
import time time.sleep(10) # 延迟10秒再退出,方便你确认脚本是否运行过 - 路径问题:如果脚本不在当前命令行的工作目录,一定要写完整的绝对路径,比如:
pythonw.exe C:\Users\YourName\Scripts\name_of_my_script.py
其他后台运行Python脚本的方法
除了pythonw,还有几个更可靠的方式实现后台运行:
- Windows任务计划程序:适合需要定时/开机自动运行的场景
- 打开「任务计划程序」,点击「创建基本任务」
- 设置触发条件(比如开机启动、每天定时运行)
- 操作选择「启动程序」,程序选
pythonw.exe,添加参数填你的脚本绝对路径 - 在「设置」里勾选「不管用户是否登录都要运行」,确保后台执行
- nssm(Windows服务管理工具):适合需要长期后台驻留的脚本
- 下载nssm工具,放到系统环境变量能识别的路径里
- 打开命令行,执行
nssm install MyPythonScript - 在弹出的配置窗口里,「Path」选
pythonw.exe,「Arguments」填脚本路径,「Working Directory」填脚本所在文件夹 - 点击「Install Service」,之后可以用
nssm start MyPythonScript启动服务,它会在后台一直运行
- 批处理文件配合start命令:适合临时后台启动
创建一个.bat文件,内容如下:
双击这个批处理文件,就能后台启动脚本,@echo off start /B pythonw.exe "C:\path\to\name_of_my_script.py" exit/B参数确保不弹出新窗口。
补充:Selenium后台运行的小细节
因为你的脚本用到了Selenium,后台运行时建议开启浏览器的无头模式,避免弹出浏览器窗口:
以Chrome为例,添加无头配置:
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument("--headless=new") # Chrome 112+的新无头模式,兼容性更好 chrome_options.add_argument("--disable-gpu") # 禁用GPU加速,避免某些环境报错 driver = webdriver.Chrome(options=chrome_options) # 后续业务逻辑...
内容的提问来源于stack exchange,提问作者omersk2
相关产品推荐
相关产品推荐

