这是我的代码:
if __name__ == "__main__":
try:
main()
except Exception:
exc_info = sys.exc_info()
traceback.print_exception(*exc_info)
os.killpg(0, signal.SIGKILL)
exit(0)
当程序发生异常时,想使用os模块的killpg方法终止当前进程,却出现错误信息
属性错误:模块“os”没有属性“killpg”
出现。我使用的是 Python 3.7 版本。
你能帮我解决这个问题吗?非常感谢。
注意:你应该学习如何查看Python文档,它将简化编程(并且你会更有效率)。因此,请为 python 标准库文档添加书签(这还可以让您快速链接到语言文档)。
无论如何,相关页面: https://docs.python.org/3/library/os.html#os.killpg
(以及关于文档的另一个技巧:你看到 URL 了吗?只需将 /3/ 替换为 /2/ 即可获得 Python 2 的文档。因此,我们看到另一个答案使用了错误的假设(并且
os.kill
也可能不可用。
函数
os.killpg
在 Python2 和 Python3 上都存在,但是两个页面都表明它仅在 Unix/Linux 和类似系统上可用(因此也可能在 macos 上)(注意:不是 Emscripten,不是 WASI 意味着同样在 Unix 和 Linux 上,它无法在列出的受控和可移植环境上工作:javascript 和 WebAssembly,因此在浏览器内它无法工作)。
为什么? Python 不控制进程,因此它只处理对操作系统的请求。并非所有操作系统都有“进程组”的概念,或者它们以不同的方式处理。注意:os.kill
仅在 Python 2.7 和 Python 3.2 及更高版本中支持 Windows。
exit()
,或者其他更强的函数。如果使用线程,也有特殊的功能。您可以在此网站上看到有关此问题的各种问题和答案。 (但是你的问题是关于使用
os.killpg
所以我不会用更好的方法转移答案)。简而言之:该函数向自己的进程组发送信号,但仅限于进程组可用的操作系统(例如 2023 年,Windows 中除外)。这不是终止调用进程的最佳方法。
if __name__ == "__main__":
try:
main()
except Exception:
exc_info = sys.exc_info()
traceback.print_exception(*exc_info)
os.kill(0, signal.SIGKILL)
exit(0)