python - 尝试失败,但代码不执行

标签 python python-3.6

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

我运行下面的命令,期望它尝试运行不存在的 scriptc,然后转储到异常并退出。但它不会运行写入 stderr 的异常代码,也不会 exit()。它继续并运行我不想运行的 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)

最佳答案

subprocess.run 如果运行的进程返回非零状态代码(此处就是这种情况),则不会引发异常。

您应该调用 check_returncode返回 CompletedProcess 对象的方法引发 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()

关于python - 尝试失败,但代码不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60533365/

相关文章:

python - os.path.join 是纯函数吗

python - 从科学杂志获取 xpath 时遇到问题,它返回一个没有元素的列表

python - 在 y 轴上绘制特定值而不是增加数据帧的比例

python - 在Linux上使用Python模块编译GEOS 3.6.2

iterator - Python 3.6 : async version of islice?

python - lambda 表达式在 Python 中接受两个参数时出错

python - 来自 Python 中 2 个不同长度列表的字典

python - 将 argv 的元素复制到新数组中

python - 如何提取tensorflow模型的输出?

类返回类型中的python函数注释是类raise undefined