尝试失败,但代码未执行

时间:2020-03-04 19:25:59

标签: python python-3.6

我想发生的事情是运行一个包含代码示例的脚本,如果scriptc没有运行,只需在stderr文件中附加错误行并转储调用脚本。

我运行以下命令,期望它尝试运行不存在的scriptc,然后转储到异常并退出。但是,它不会运行写入stderr的异常代码,并且不会退出()。它继续运行并运行我不想运行的scriptb代码。有人可以告诉我我在做什么错吗?

try:
   out=subprocess.run(["python3",'scriptc.py'],stdout=fout,stderr=ferr, universal_newlines=True)

except:

     sys.stderr.write("scriptc not run \n")
     sys.exit()

fout=subprocess.run(["python3",'scriptb.py'],stdout=fout,stderr=ferr, universal_newlines=True)

1 个答案:

答案 0 :(得分:2)

subprocess.run如果运行的进程返回非零状态码,则不会引发异常。

您应该改为调用返回的CompletedProcess对象的check_returncode方法来引发CalledProcessError异常:

out=subprocess.run(["python3",'scriptc.py'],stdout=fout,stderr=ferr, universal_newlines=True)
try:
    out.check_returncode()
except subprocess.CalledProcessError:
    sys.stderr.write("scriptc not run \n")
    sys.exit()