下面是我的代码:
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方法终止当前进程,但出现错误消息“AttributeError:模块'os'没有属性' killpg '”。我用的是Python 3.7版本。
你能帮我解决这个问题吗?非常感谢您的光临。
2条答案
按热度按时间hgqdbh6s1#
也许你的python版本是2.x,你可以修改你的代码并重试,使用“os.kill()”
字符串
kkbh8khc2#
注意:你应该学习如何查看Python文档,它会简化编程(并且你会更有效率)。所以把python标准库文档加入书签(这也给了你快速链接到语言文档)。
在任何情况下,相关页面:https://docs.python.org/3/library/os.html#os.killpg
(and关于文档的另一个技巧:你看到URL了吗?只需将/3/替换为/2/,您就可以获得Python 2的文档。因此,我们看到另一个答案使用了错误的假设(并且
os.kill
也可能不可用。函数
os.killpg
在Python 2和Python3上都存在,但这两个页面都表明它只在Unix/Linux和类似的系统上可用(所以可能也在macos上)(注意:not Emscripten,not WASI 意味着在Unix和Linux上,它也不能在列出的受控和可移植环境中工作:JavaScript和WebAssembly,因此在浏览器中它将无法工作)。为什么?Python不控制进程,所以它只是处理对操作系统的请求。不是所有的操作系统都有 * 进程组 * 的概念,或者它们以不同的方式处理。注意:
os.kill
仅在Python 2.7和Python 3.2及更高版本中支持windows。在任何情况下,如果你想终止当前进程,你应该使用
exit()
或其他更强大的函数。如果你使用线程,也有一些特殊的函数。你可以在这个网站上看到关于它的各种问题和答案。(但是你的问题是关于使用os.killpg
的,所以我不会用更好的方法来转移答案)。简而言之:该函数向自己的进程组发送信号,但仅在进程组可用的操作系统上(例如2023,而不是Windows)。这不是终止调用进程的最佳方式。