因此,使用 Windows 10 和 Python 3.6。我创建了一个
.py
脚本,它可以使用命令
python myscript.py
在命令提示符下正常运行,但是当我制作该脚本的精确副本并为其赋予扩展名
.pyw
,并尝试使用 pythonw 运行它时命令
pythonw myscript.pyw
,什么也没有发生。
pythonw
根本没有出现在我的任务管理器中,并且该脚本的一部分向我的松弛通道发送反馈,这样我就知道它是否“在后台运行”。我确实在任务管理器中看到 pythonw 闪烁了半秒然后消失了,所以这告诉我脚本在某种程度上崩溃了,但是如果它与 python 一起运行得很好,为什么会出现这种情况呢?我想将此脚本作为后台进程运行,而不是使用
python
命令。
我尝试添加:
sys.stdout = open('log.txt', 'w')
sys.stderr = open('err.txt', 'w')
到
.pyw
脚本的顶部以强制输出到这些文件中。我尝试运行命令
pythonw myscript.py
,仍然没有任何结果,并且还尝试将 pythonw.exe 设置为主程序来打开 .pyw 文件,所以我双击脚本来运行它,但没有任何启动。我知道它在后台运行,没有命令提示符,这就是我想要的,但程序本身没有运行。我也检查了我的环境变量路径,这不是问题,因为
pythonw.exe
与
python.exe
位于同一文件夹中,并且
python.exe
从命令提示符运行没有问题。
我还能尝试什么?
当然,我会帮解决 Pythonw 问题。以下是可能导致 Pythonw 脚本无法运行且不显示错误消息的常见原因,以及如何对其进行故障排除的方法:
1. 无控制台窗口的未处理异常:
-
问题:
pythonw
设计为在没有控制台窗口的情况下运行。如果脚本中存在任何未处理的异常,它将在不显示任何错误消息的情况下静默失败。 -
解决方案:
-
实现强大的错误处理:
将代码(尤其是容易出错的部分)包装在
try...except
块中,以捕获并记录所有异常。这样,即使在没有控制台窗口的情况下,也可以了解到出了什么问题。 - 将错误记录到文件: 如所述,将错误重定向到文件可以帮助调试。已经在这样做,但确保定期检查日志文件以查找错误消息。
-
实现强大的错误处理:
将代码(尤其是容易出错的部分)包装在
2. 导入问题:
- 问题: 脚本在导入模块时可能存在问题,尤其是当它们依赖于特定路径或配置时。
-
解决方案:
-
验证导入:
仔细检查脚本中使用的所有
import
语句。确保这些模块已安装并且路径设置正确。 - 使用绝对导入: 尽可能使用绝对导入,因为它们在脚本从不同位置运行时更加可靠。
-
验证导入:
仔细检查脚本中使用的所有
3. 文件关联问题:
-
问题:
即使之前设置了它,Windows 中的
.pyw
文件关联有时也可能会被重置,从而导致脚本无法使用pythonw
正确启动。 -
解决方案:
-
重置文件关联:
右键单击
.pyw
文件,选择“打开方式”>“选择其他应用”。选中“始终使用此应用打开 .pyw 文件”。浏览并选择pythonw.exe
(通常位于C:\Python36
或类似路径下)。
-
重置文件关联:
右键单击
4. 无限循环或阻塞代码:
- 问题: 如果的脚本进入无限循环或被长时间运行的任务阻塞而没有屈服于事件循环,它可能会显得像被卡住了一样,并且不会产生任何输出。
-
解决方案:
-
检查循环和阻塞操作:
查看的代码中是否有任何循环或操作可能会无限期阻塞。在长时间运行的任务后添加机制来产生事件循环(例如,使用
time.sleep(0)
)或将其分解成更小的块。
-
检查循环和阻塞操作:
查看的代码中是否有任何循环或操作可能会无限期阻塞。在长时间运行的任务后添加机制来产生事件循环(例如,使用
调试步骤:
-
从一个简单的脚本开始: 创建一个只包含以下内容的简单
test.pyw
文件:python import time with open('test.txt', 'w') as f: f.write('Script started\n') time.sleep(5) f.write('Script finished\n')
双击它运行。如果此脚本成功创建了test.txt
文件并写入消息,则说明的基本pythonw
设置正常工作。 -
逐步添加代码: 将代码片段从原始脚本逐个添加到
test.pyw
,并在每次添加后进行测试。这将帮助查明是哪一部分代码导致了问题。 -
使用调试器: 如果可能,请使用像 Visual Studio Code 或 Thonny 这样的 Python IDE。这些 IDE 允许设置断点并逐步执行代码,这有助于确定问题的确切位置,即使在使用
pythonw
时也是如此。
如果尝试了所有这些步骤并且仍然无法让的脚本正常工作,请在的问题中提供以下信息,以便我提供更多帮助:
- 的脚本的简化版本: 分享足以重现该问题的最小版本。
-
在
log.txt
和err.txt
文件中看到的确切错误消息(如果有)。 - 的 Python 版本和操作系统版本。
祝好运,如果有任何其他问题,请告诉我!
标签:python From: 64408100