Приглушить ловушку в сценарии оболочки

У меня есть сценарий оболочки, который я использую для вызова многих сценариев Python. Я добавил ловушку в свой сценарий оболочки, чтобы поймать Ctrl+ C и выйти. Но если скрипт Python запущен, и я нажал Ctrl+ C, он также показывает блок скрипта Python, который выполнялся! Я не хочу этого. Я знаю, что лучшим способом было бы добавить KeyboardInterrupt в мои скрипты Python, но это потребует много усилий. Я хочу, чтобы решение было таким, чтобы при нажатии Ctrl+ C, управление сценарием завершалось беззвучно.

например: 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

Я хочу, чтобы он завершился простым сообщением "Прерывание клавиатуры".

2 ответа

Я не уверен, что это хорошая практика, но если вам это нужно, просто оберните sleep в заявлении "попробуй / кроме".

try:
    sleep(50)
except KeyboardInterrupt:
    pass

Изменить из-за комментария OP:

Вы можете сделать обертку Python, которая ловит KeyboardInterrupt, она довольно грязная, но вы можете сделать что-то вроде:

import imp
try:
    imp.load_source('module.name', '/path/to/script.py')
except KeyboardInterrupt:
    exit()

Поскольку ваш файл python (/path/to/script.py) - это не библиотека, а скрипт, он будет выполняться при загрузке, поэтому вы можете отлавливать ошибки на один уровень выше и делать это более общим способом. Вам, безусловно, придется решать другие вопросы, я думаю, но я должен сделать эту работу.

Вы можете проверить этот вопрос для получения дополнительной информации о Imp и о том, как загрузить библиотеки Python.

Вы можете просто поместить свой стандарт в /dev/null

#!/usr/bin/env bash

control_c() {
    echo
    echo "Keyboard Interrupt"
    exit
}

trap control_c INT
python b.py 2>/dev/null
Другие вопросы по тегам