【发布时间】:2019-01-01 04:21:03
【问题描述】:
我有一个调用 Python 的 shell 脚本。
#! /bin/bash
shopt -s extglob
echo "====test===="
~/.conda/envs/my_env/bin/python <<'EOF'
import sys
import os
try:
print("inside python")
x = 2/0
except Exception as e:
print("Exception: %s" % e)
sys.exit(2)
print("at the end of python")
EOF
echo "end of script"
如果我执行这个,下面的行仍然会被打印出来。
"end of script"
我想在python脚本的异常块中退出shell,让脚本无法到达EOF
有没有办法在上面的except 块中创建和杀死subprocess,这会杀死整个shell 脚本?
我可以通过杀死整个 shell 脚本来生成一个虚拟子进程并在异常块内杀死它吗?
任何示例都会有所帮助。 提前致谢。
【问题讨论】:
-
只保存你调用python那一行的返回值,在
EOF之后检查 -
或有非零返回码状态退出您的外壳 (
set -e)。也不要做sys.exit(-1)。退出代码是肯定的。便携尊重范围0-255 -
@Jean-FrançoisFabre 我不想
set -e因为我希望一些错误静默失败并在脚本中继续,但特别是这个python异常会杀死整个脚本。谢谢,不会使用-1,编辑了帖子。 -
这个问题不是重复的......
-
问题是如何根据python脚本的功能退出脚本,正如提问者所重申的那样。
标签: python bash shell subprocess sh