python运行脚本被杀死_从python异常中杀死Bash脚本
我有一个在其中调用Python的shell脚本。
#! /bin/bash
shopt -s extglob
echo"====test===="
~/.conda/envs/my_env/bin/python <
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之后检查它
或者具有非零返回码状态退出shell(set -e)。 也不要做sys.exit(-1)。 退出代码是正面的。 便携式方面0-255
@ Jean-FranoisFabre我不想set -e因为我希望一些错误无声地失败并继续在脚本中运行,但特别是这个python异常会杀死整个脚本。 谢谢,不会使用-1,编辑帖子。
这个问题不重复......
@ritlew为什么不重复? 它基本上归结为你评论的内容(查看链接)。
问题是如何根据python脚本的作用退出脚本,正如提问者所重申的那样。
它出现了,被问到的人接受了答案......这是前一个重复链接中的一个副本。 你对提问者想要的内容的解释很有趣,但不是真实的。
它出现了......反过来说:)
整个EOF ... EOF块在Python运行时内执行,因此退出它不会影响bash脚本。如果你想停止进一步的bash脚本进程,你需要收集退出状态并在Python执行后检查它,即:
#!/bin/bash
~/.conda/envs/my_env/bin/python <
import sys
sys.exit(0x01) # use any exit code from 0-0xFF range, comment out for a clean exit
print("End of the Python script that will not execute without commenting out the above.")
EOF
exit_status=$? # store the exit status for later use
# now lets check the exit status and see if python returned a non-zero exit status
if [ $exit_status -ne 0 ]; then
echo"Python exited with a non-zero exit status, abort!"
exit $exit_status # exit the bash script with the same status
fi
# continue as usual...
echo"All is good, end of script"
这样就可以了。 万分感谢!:)
从shell脚本中您有2个选项:
set -e:所有错误退出脚本
检查python子命令返回代码,如果非零则中止
(这里可能有更多细节:如果任何命令返回非零值,则中止shell脚本?)
现在,如果您不想从shell脚本更改处理,则可以获取python脚本的父进程并将其终止:
except Exception as e:
import os,signal,sys
print("Exception: %s" % e)
os.kill(os.getppid(),signal.SIGTERM)
sys.exit(2)
如果你在Windows上需要这个,这不起作用(os.kill不存在),你必须调整它来调用taskkill:
subprocess.call(["taskkill","/F","/PID",str(os.getppid())])
现在我要说杀死父进程是不好的做法。除非您不控制此父进程的代码,否则应该尝试优雅地处理退出。
谢谢! 不os.kill取2个参数,另一个是sig吗?
是的,它确实!编辑。
谢谢,这就是我想要的。 更清洁,更好。 奇迹般有效。
我不会称之为更干净,但如果你有300个shell脚本,你可能不想全部修改它们,所以这是仅在python脚本中进行更改的解决方案。 这只有在shell BTW直接调用时才有效。
杀死整个脚本的一种方法是保存PID,然后使用Python的系统命令在异常发生时对PID执行kill命令。如果我们导入'os',它将是:
# In a shell
PID=$$
...
// Some Python Exception happens
os.system('kill -9' + $PID)
python运行脚本被杀死_从python异常中杀死Bash脚本相关推荐
- mac python运行按哪个键_#mac python如何使用教程#怎么在mac终端运行python程序
mac如何投屏手机 1.首先,解iPhone,然后用手指从下往上,打开控心,在其中就可以找到AirPlay了屏幕镜像. 2.接来下就来教大家如何使用AirPlay吧,首先将手机和电脑连接在同一WiFi ...
- python运行程序的快捷键_在Python集成开发环境中,可使用快捷键()运行程序。...
在Python集成开发环境中,可使用快捷键()运行程序. 更多相关问题 如何理解创新能力测试与创新能力的关系? 直埋线路与埋式电力电缆电压<35kv平行时最小间距为(). 放射性物品装卸作业时, ...
- python运行代码不成功_【Python】程序在运行失败时,一声不吭继续运行pass
在前面程序出现异常时,我们都会给一个提示,告诉用户,程序为什么会异常,但是现在我们想在程序出现异常时,不做处理,让程序默默的往下执行,不要做声. 那么我们就引入了pass语句 defcount_wor ...
- python路径在哪里设置_找Python安装目录,设置环境路径以及在命令行运行python脚本实例...
第一点:找Python安装目录 方法一: 方法二: 输入import sys print(sys.path) 化黑线处 第二点:找到安装目录后就可以开始设置环境变量 这里我的安装目录为C:\Progr ...
- python写手机脚本脱离电脑_让Python在Android系统上飞一会儿:第三节 在电脑上编写程序在手机上运行...
本节目录 1. 一些传统的方法2. 将程序的代码生成二维码图片3. 使用手机扫描生成的二维码,并将其转化为py脚本 前言 最手机上写脚本是一件每场辛苦的事情,虽然SL4A人性化的为我们提供了API快速 ...
- 详解python运行三种方式_详解python调用cmd命令三种方法
目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...
- python运行界面如何缩小_如何使用Python调整图像大小
作者|Nicholas Ballard 编译|VK 来源|Towards Data Science 可以说,每一个"使用计算机的人"都需要在某个时间点调整图像的大小.MacOS的预 ...
- 详解python运行三种方式_详解python运行三种方式
方式一 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗口如下: $ p ...
- python perl 日本的应用_将Python,Perl,Ruby或Shell脚本转换为适用于Mac OS X的自包含应用程序 | MOS86...
Platypus是一款非常出色的实用程序,可让您将任何脚本转换为独立的Mac OS X应用程序.免费且非常简单的使用,Platypus将支持任何shell脚本,Perl,Python,PHP,Ruby ...
最新文章
- hibernate脏数据_Hibernate性能提示:脏收集效果
- python size(0)_对x.view(x.size(0), -1)的一些理解
- leetcode 646 python
- PyTorch 1.0 中文文档:广播语义
- vSphere 6.5 Upgrade Considerations Part-2 (vSphere 6.5升级注意事项第2部分)
- cisco的路由器上rip的被动接口,单播更新,水平分隔
- 继承关系下怎样使用Builder 模式
- 俄罗斯方块游戏的算法
- linux的DRM应用程序,Linux中的DRM
- sel4 手册总结之介绍与内核服务和对象
- 回顾2017展望未来
- python保存文件名,line 257, in urlretrieve tfp = open(filename, ‘wb‘)OSError: [Errno 22] Invalid argument:
- 郑轻OJ:1153: 简易版最长序列
- 内核驱动隐藏自身【断链】
- 很多APP都支持了 “本机号码一键登录”,知道是怎么实现么?
- PIC16F877A单片机 (中断与定时器Timer1)
- 一个具有一些功能的网络画图板
- Rk3326 Android8.0HAL服务添加
- python发送短信验证码登录_python发送短信验证码
- 国内外php主流开源cms汇总(2010年1月) .