嵌入在bash中的Python脚本不退出

嵌入在bash中的Python脚本不退出,python,bash,terminate,continue,Python,Bash,Terminate,Continue,我有一个奇怪的问题。我有一个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 我

我有一个奇怪的问题。我有一个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
有什么好处?显然,exit正在正确地调用,这与bash脚本中调用python脚本的output语句之间没有任何区别

(我不一定能详细说明python脚本中“很多东西”的工作原理,因为我正在修改我不完全理解的现有代码。我基本上只考虑了脚本的工作原理,修改了输出而不是格式化,但我很乐意尝试向您提供所需的任何其他信息)

sys.exit()所做的是抛出类型为的异常。如果脚本捕获此异常,它将继续执行过去的
sys.exit()

此外,如果您有非守护进程线程,这些线程可能会阻止进程终止

如果是这种情况,您可以或者以某种方式向他们发出信号,表示您希望退出脚本,并让他们自行关闭


最后,还有,但你不应该求助于它。

你能用一个更简单的Python脚本来重现它吗?这很奇怪,对我来说它可以工作(只有sys.exit(“Python脚本…”)和bash脚本中的echo条)。如果你从.py文件中删除除
sys.exit()
行之外的所有内容,它还会断开吗?如果不是,问题可能出在
#很多东西
的某个地方。如果
#很多东西
中的所有东西都被删除,那么它确实会起作用。我只是不确定我修改了什么导致了这个。我将原始版本与修改后的版本进行了区分,我能看到的唯一重要变化是打印格式。有没有办法更彻底地终止脚本?我使用的代码确实使用了一些线程。(顺便感谢您的快速回答)@TrialbyCode:最干净的方法可能是将它们转换为守护进程线程。我已经扩展了答案。我有一个非守护进程线程在运行。Daemonizing修复了退出挂起的问题,但是对我的输出造成了一些外观上的损坏,但是现在我知道问题出在哪里了。现在我必须弄清楚为什么会发生这种情况,因为我根本没有修改代码的那一部分。非常感谢您对@aix的帮助。