我有一个shell脚本,我用来调用许多python脚本。我在我的shell脚本中添加了一个陷阱来捕获ctrl + c并退出。但是如果python脚本正在运行并且我点击了ctrl + c,它还会显示正在执行的python脚本块!我不要那个。我知道更好的方法是在我的python脚本中添加KeyboardInterrupt,但这需要付出很多努力。我想要一个解决方案,当我按下ctrl + c时,te控制脚本执行以静默方式结束。
例如: a.sh:
control_c() {
echo
echo 'Keyboard Interrupt'
exit
}
trap control_c INT
python b.py
b.py:
from time import sleep
sleep(50)
当我运行a.sh并点击ctrl + c时,我不想看到这样的python块:
^CTraceback (most recent call last):
File "b.py", line 3, in <module>
sleep(50)
KeyboardInterrupt
Keyboard Interrupt
我想让它退出一个简单的键盘中断&#39;消息。
答案 0 :(得分:1)
我不确定这是一个好习惯,但是如果你需要它,只需在try / except语句中包裹你的sleep
。
try:
sleep(50)
except KeyboardInterrupt:
pass
你可以做一个捕捉KeyboardInterrupt的Python包装器,它非常脏,但你可以这样做:
import imp
try:
imp.load_source('module.name', '/path/to/script.py')
except KeyboardInterrupt:
exit()
因为你的python文件(/path/to/script.py)不是lib而是一个脚本,它将在加载时执行,所以你可以捕获一层上层的错误,所以以更通用的方式执行。你肯定必须处理我认为的其他问题,但我应该做这项工作。
您可以查看this question以获取有关imp以及如何加载python库的更多信息。
答案 1 :(得分:0)
您可以简单地将标准输出到/ dev / null
#!/usr/bin/env bash
control_c() {
echo
echo "Keyboard Interrupt"
exit
}
trap control_c INT
python b.py 2>/dev/null