属性错误:模块“os”没有属性“killpg”

问题描述 投票:0回答:2

这是我的代码:

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-3.x pytorch operating-system text-classification few-shot-learning
2个回答
1
投票

注意:你应该学习如何查看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 中除外)。这不是终止调用进程的最佳方法。


0
投票

if __name__ == "__main__": try: main() except Exception: exc_info = sys.exc_info() traceback.print_exception(*exc_info) os.kill(0, signal.SIGKILL) exit(0)

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.