Сценарий Python, встроенный в Bash, не выходит
У меня любопытная проблема. У меня есть скрипт bash, который вызывает скрипт Python внутри него. Сценарий Python выполняется успешно, но никогда не завершается полностью
Содержание скрипта Bash:
#! /usr/bin/env bash
python python_script.py
echo "bar"
содержание скрипта Python:
#Much stuff
sys.exit("The python script just ended")
То, что я ожидаю увидеть по окончании будет:
>The python script just ended
>bar
Вместо этого я получаю:
>The python script just ended
Если я прерываю работу с клавиатурой, bash продолжает:
^C>bar
Что дает? Очевидно, что выход вызывается правильно, и между ним и оператором вывода в скрипте bash, который вызвал скрипт python, ничего нет.
(Я не могу дать подробные сведения о работе "Многое" в скрипте Python, так как я изменяю существующий код, который я не до конца понимаю. Я в основном оставил работу скрипта в одиночку, и изменил вывод больше всего на форматирование, но я с радостью постараюсь предоставить вам любую запрашиваемую дополнительную информацию)
2 ответа
Какие sys.exit()
делает это бросить исключение типа SystemExit
, Если ваш сценарий перехватит это исключение, он продолжит выполнение после sys.exit()
,
Кроме того, если у вас есть потоки, не являющиеся демонами, это может помешать завершению процесса.
Если это так, вы можете либо превратить их в потоки демонов, либо каким-либо образом сообщить им, что вы хотите выйти из сценария, и позволить им отключиться.
Наконец, есть os._exit()
, но вы не должны прибегать к этому.
Также работает следующее:
import os
print('Hellow world')
os._exit(os.EX_OK)
В Ubuntu он выходит из терминала. См. Также пример в этой ссылке Программа с методом os.exit ()