首页 > 解决方案 > 如果遇到错误,我需要我的 python 程序自行结束

问题描述

我制作了一个在后台运行的python exe,用于数据库导入和导出。该 exe 通过 php 脚本运行。这是一般流程:

  1. 用户访问导出页面并单击导出按钮。
  2. PHP 抛出一个运行导出 exe 的 ajax
  3. 导出 exe 创建一个包含导出数据的文件,并在 result.txt 文件中写入 100
  4. PHP 检查 result.txt 文件以查看结果是否为 100。如果是,那么 PHP 会抛出一个 ajax 来杀死导出的 exe

这不是最具开创性的过程,是的。但是,该过程有效。我尝试了多次测试,得到了 16/20 的“工作”结果。exe 失败的 4 次是当我使用错误的用户、密码、数据库名称或主机编辑配置时。

当程序失败时,它不会自行结束。它在 php 脚本等待其响应时继续运行。我尝试在所有错误处理程序中添加 exit() 语句,但它似乎不起作用。所以,我接下来要做的是测试那个程序的 pyw 脚本。我在错误处理程序中添加了一个 print(1) 语句,以查看 pyw 脚本是否通过它们并且确实通过了它们。在这里查看这张图片

所以,我做了另一件事。这次我编写了脚本,如果遇到错误,将 result.txt 文件的内容编辑为“xxx”。基本上,如果 php 脚本打开 result.txt 并发现它的内容是“xxx”,那么它将任务杀死导出的 exe。认为这可行,我开始编译 pyw 脚本。令人沮丧的是,在我开始运行 php 脚本并运行 exe 后,它卡住了,等待 result.txt 再次更改为 100 或“xxx”。该程序甚至不会编辑 result.txt。但是,当我使用 vscode 调试它的 pyw 脚本时,它就完成了这项工作。我还尝试检查程序是否正常工作。确实如此。

我很困惑。为什么它在 pyw 脚本中有效,但在它是可执行文件时却失败了?

标签: pythonerror-handlingtaskkill

解决方案


尝试使用sys.exit而不是exit解决您的问题。有关两者之间差异的详细信息,请参阅此问题。


推荐阅读