bom*_*ant 5 python bash shell subprocess sh
我有一个 shell 脚本在里面调用 Python。
#! /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"
Run Code Online (Sandbox Code Playgroud)
如果我执行此命令,下面的行仍然会被打印。
"end of script"
Run Code Online (Sandbox Code Playgroud)
我想在python脚本的异常块中退出shell并让脚本无法到达EOF
有没有办法subprocess在except上面的块中创建并杀死 a ,这将杀死整个 shell 脚本?
我可以生成一个虚拟子进程并通过杀死整个 shell 脚本来在异常块内杀死它吗?
任何例子都会有帮助。提前致谢。
从 shell 脚本中,您有 2 个选项:
set -e:所有错误退出脚本(也许更多细节在这里:如果任何命令返回非零值,则中止 shell 脚本?)
现在,如果您不想更改 shell 脚本的处理方式,您可以获取 python 脚本的父进程并终止它:
except Exception as e:
import os,signal,sys
print("Exception: %s" % e)
os.kill(os.getppid(),signal.SIGTERM)
sys.exit(2)
Run Code Online (Sandbox Code Playgroud)
如果你在 Windows 上需要这个,这不起作用(os.kill不存在),你必须调整它来调用taskkill:
subprocess.call(["taskkill","/F","/PID",str(os.getppid())])
Run Code Online (Sandbox Code Playgroud)
现在我想说杀死父进程是不好的做法。除非您不控制该父进程的代码,否则您应该尝试优雅地处理退出。
| 归档时间: |
|
| 查看次数: |
2120 次 |
| 最近记录: |