Python错误代码

6 投票
1 回答
9163 浏览
提问于 2025-04-16 03:38

我有一个Python脚本,它使用subprocess.Popen来同时运行多个实例的另一个Python脚本,每个实例处理不同的文件。

我有300个文件需要通过这个过程进行测试。每次运行时,随机会有一些文件失败,失败的文件总是不同的,所以这些文件本身没有问题,但子进程在失败时会返回错误代码-6或-11。如果我用相同的输入文件再运行一次脚本,它就能成功。

-6和-11是什么?它们能和Python的异常联系起来吗?

编辑以澄清:这些脚本实际上是Django管理命令。我有一个很大的try: except语句块,用来捕获任何异常并调用sys.exit(1),所以失败发生在我的代码之外,可能是在加载其他模块时。我查看了Django的源代码,发现它在出现任何错误时也总是调用sys.exit(1),所以-6和-11似乎是来自更底层的。我在想它们可能与竞争条件有关的操作系统错误,但我不能确定。

1 个回答

13

你有没有从mysubproc.returncode获取到退出状态?

根据这个链接的说明:

如果返回的是一个负值 -N,这表示子进程是因为信号N而被终止的(仅限Unix系统)。

信号6和11分别是SIGABRT(中止)和SIGSEGV(段错误)(这个链接有详细说明)。我猜这些其他脚本可能在某个扩展或者它依赖的库上遇到了问题。你可能有一个不好的构建版本,要么重新编译一下(如果你是手动编译的),要么看看是否有更新的包可以使用。

撰写回答