如何解释Python的subprocess.run中的返回码

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

我当前正在运行一组单元测试,但实际上崩溃了。因此,为了运行所有程序并了解导致崩溃的原因,我在以下代码中使用了Python的子进程模块-tester.py

import os
import subprocess

test_dir = './.build_release/test/'
test_files = sorted(os.listdir(test_dir)) # Gets all unittest files

with open('test_results_bad.txt','w') as f: # Save results of unittests in text file
    for curr_test in test_files:
        # Show current test
        f.write(curr_test + ' ')
        print(curr_test)

        # Run current test
        curr_proc = subprocess.run([os.path.join(test_dir, curr_test)], shell=False)

        # Indicate whether current test crashed or not
        if curr_proc.returncode == 0:
            f.write("PASSED\n")
        else:
            f.write("F A I L E D ..... ????" + str(curr_proc.returncode) + '\n')

我的操作系统是Ubuntu 18.04。尝试从https://bitbucket.org/aquariusjay/deeplab-public-ver2.git

构建DeepLab_v2时遇到崩溃

崩溃的三个单元测试的返回码分别为-6,-6和-11。这些是什么意思?

我已经四处搜寻Google,仅使自己感到困惑。我认为负号表示错误,但找不到方法来识别6和11的值应该给我什么信息。

python subprocess runtime-error
1个回答
1
投票

这些返回代码是在您通过子进程运行的程序中定义的,它们不是常规的OS错误代码或Python代码。查找有关通过子流程调用的代码的文档。例如,这是一个返回错误代码的批处理脚本。

@echo off
if /I "%~1"=="TEST" (exit 5) else (exit 0)

如果使用子过程调用此函数,则除0以外的任何参数都将获得代码TEST

import subprocess

subprocess.call(['test.bat', 'hello world'])
# returns:
0

subprocess.call(['test.bat', 'TEST'])
# returns:
5
© www.soinside.com 2019 - 2024. All rights reserved.