我从另一个python文件运行python脚本。有没有办法可以知道第二个脚本中是否发生了一个eception?
EX:script1.py调用script2.py python script2。 py -arguments script1如何知道script2中是否发生异常?
run.py
import subprocess
test.py
import argparse
print "testing exception"
parser = argparse.ArgumentParser(description='parser')
parser.add_argument('-t', "--test")
args = parser.parse_args()
print args.test
raise Exception("this is an exception")
由于
答案 0 :(得分:3)
当Python程序抛出异常时,该进程返回非零返回码。像call
这样的子流程函数默认会返回返回码。因此,要检查是否发生了异常,请检查非零退出代码。
以下是检查返回码的示例:
retcode = subprocess.call("python test.py", shell=True)
if retcode == 0:
pass # No exception, all is good!
else:
print("An exception happened!")
另一种方法是使用subprocess.check_call,它会在非零退出状态下抛出subprocess.CalledProcessError异常。一个例子:
try:
subprocess.check_call(["python test.py"], shell=True)
except subprocess.CalledProcessError as e:
print("An exception occured!!")
如果您需要知道测试程序中发生了哪个异常,可以使用exit()更改异常。例如,在test.py中:
try:
pass # all of your test.py code goes here
except ValueError as e:
exit(3)
except TypeError as e:
exit(4)
在您的父程序中:
retcode = subprocess.call("python test.py", shell=True)
if retcode == 0:
pass # No exception, all is good!
elif retcode == 3:
pass # ValueError occurred
elif retcode == 4:
pass # TypeError occurred
else:
pass # some other exception occurred
答案 1 :(得分:0)
最好的方法可能是使script2成为一个实际的模块,将你想要的东西导入script1,然后使用现有的try / except机制。但也许这不是一个选择?否则我认为从os.system返回的内容可能包括你需要的内容。