Правильный способ обработки Ctrl-C в Python в LinuxPython

Программы на Python
Ответить
Anonymous
 Правильный способ обработки Ctrl-C в Python в Linux

Сообщение Anonymous »

На нескольких страницах в Интернете, включая ответы на этот вопрос SO и на этой странице обучающей компании, говорится, что вам следует обрабатывать Ctrl-C в Python с помощью кода, подобного:

Код: Выделить всё

import signal
import sys
import time

try:
while True:
print('Running...')
time.sleep(10)
except KeyboardInterrupt:
print('Ctrl-C pressed!')
sys.exit(0)
Однако возникает довольно серьезная проблема, если вы используете код с таким решением из цикла Bash, например:

Код: Выделить всё

while true; do
./python_script.py
done
Проблема в том, что, поскольку Python поглощает Ctrl-C, Bash не знает, что сценарий завершился ненормально, поэтому просто продолжает цикл, и выход становится очень трудным.
Я спросил у AI, и он предложил сначала указать конкретный код ошибки для вызова sys.exit, который не сработал, а затем использовать вызов raise, который остановил сценарий таким образом, что это привело к завершению Bash цикл, но также по-прежнему дает трассировку стека Python.
Когда ИИ попросили найти лучшее решение, все, что ИИ смог придумать, это добавить ОС импорта, а затем использовать очень не-Pythonic вид:

Код: Выделить всё

signal.signal(signal.SIGINT, signal.SIG_DFL)
os.kill(os.getpid(), signal.SIGINT)
Неужели не существует элегантного способа сделать это правильно с помощью Python?

Подробнее здесь: https://stackoverflow.com/questions/798 ... n-on-linux
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»