У меня есть класс с некоторыми функциями, которые в основном выполняют проверку выходных данных, функции этого класса вызываются с помощью подпроцесса.Теперь, если проверка выходных данных завершается неудачно, у подпроцесса есть вызов sys.exit с другим кодом, в зависимости от того, какая проверка завершилась неудачей.
В основном коде у меня есть это:
try:
exitCode = 0
#import module for current test
teststr = os.path.splitext(test)[0]
os.chdir(fs.scriptFolder)
test = __import__(teststr)
#delete old output folder and create a new one
if os.path.isdir(fs.outputFolder):
rmtree(fs.outputFolder)
os.mkdir(fs.outputFolder)
# run the test passed into the function as a new subprocess
os.chdir(fs.pythonFolder)
myEnv=os.environ.copy()
myEnv["x"] = "ON"
testSubprocess = Popen(['python', test.testInfo.network + '.py', teststr], env=myEnv)
testSubprocess.wait()
result = addFields(test)
# poke the data into the postgresql database if the network ran successfully
if testSubprocess.returncode == 0:
uploadToPerfDatabase(result)
elif testSubprocess.returncode == 1:
raise Exception("Incorrect total number of rows on output, expected: " + str(test.testInfo.outputValidationProps['TotalRowCount']))
exitCode = 1
elif testSubprocess.returncode == 2:
raise Exception("Incorrect number of columns on output, expected: " + str(test.testInfo.outputValidationProps['ColumnCount']))
exitCode = 1
except Exception as e:
log.out(teststr + " failed", True)
log.out(str(e))
log.out(traceback.format_exc())
exitCode = 1
return exitCode
Теперьвыходные данные этого показывают все исключения traceback и python для вызовов sys.exit в подпроцессе.Я фактически регистрирую все ошибки, поэтому я не хочу, чтобы что-либо отображалось в командной строке, если я не распечатал это вручную.Я не совсем уверен, как это сделать.