bash сценарий передачи прерывания клавиатуры на Python сценарий - PullRequest
0 голосов
/ 01 мая 2020

У меня есть скрипт bash, который запускает мой скрипт python. Суть в том, что я передаю множество (иногда меняющихся) аргументов скрипту python. Поэтому я нашел полезным запустить мой сценарий python со сценарием bash, в котором я "сохранил" список аргументов.

#!/bin/bash
cd $(dirname $0)
python3 script.py [arg0] [arg1]

В моем сценарии Python реализовано исключение KeyboardInterrupt-Exception, которое сохранит некоторые открытые файлы и выйдет из сценария python. Теперь мой вопрос: когда я запускаю скрипт оболочки, мне нужно, по крайней мере, нажать 3 раза Strg + C, получить python ошибок, и он остановится.

Правильно ли я догадываюсь, что мой Strg + C не распознается python, но вместо этого сценарием оболочки? Есть ли способ передать прерывание клавиатуры от сценария оболочки к запущенному в нем сценарию python?

Кстати: сценарий python выполняет бесконечный l oop (если это важно ) Сценарий

Python выглядит следующим образом для исключения. Как указывалось, он работает бесконечно l oop.

    while True:
        try:
            #doing stuff here

        except KeyboardInterrupt:
            for file in files:
                file.close()
            break

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Если это весь ваш сценарий, почему бы не использовать хвостовой вызов python? Bash полностью исчезнет.

#!/bin/bash
cd $(dirname $0)
exec python3 script.py [arg0] [arg1]
0 голосов
/ 02 мая 2020

попробуйте команду "trap", чтобы назначить настраиваемое действие для сигналов. Для Ctrl- C вам нужно игнорировать SIGINT, также вы можете игнорировать SIGTERM:

function ignore_ctrlc() {
        echo "ignored"
}

trap ignore_ctrlc SIGINT SIGTERM
declare -i counter=0
while true; do
  echo "sleep for 1 sec"
  sleep 1
  counter+=1
  [[ $counter -gt 10 ]] && exit 0
done

В приведенном выше сценарии Ctrl- C прервет выполнение команды (скорее всего это будет сон 1) , но не будет прерывать сам скрипт. В вашем случае ваш python скрипт должен игнорировать Ctrl- C, поэтому я думаю, что он будет вообще проигнорирован.

...