Сценарий 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 ()

Другие вопросы по тегам