我如何退出一个脚本早,像die()命令在PHP?
当前回答
也可以简单地使用exit()。
请记住sys.exit(), exit(), quit()和os._exit(0)会杀死Python解释器。因此,如果它出现在execfile()从另一个脚本调用的脚本中,它将停止两个脚本的执行。
请参见“停止执行使用execfile调用的脚本”以避免这种情况。
其他回答
我刚刚发现,在编写多线程应用程序时,引发SystemExit和sys.exit()都只杀死正在运行的线程。另一方面,os._exit()退出整个进程。这在“为什么在Python线程中调用sys.exit()时不退出?”中讨论过。
下面的例子有两个线程。肯尼和卡特曼。卡特曼应该永远活着,但肯尼被递归调用,应该在3秒后死亡。(递归调用不是最好的方式,但我有其他原因)
如果我们也想让卡特曼在肯尼死的时候死,肯尼就应该带着os走。退出,否则,只有肯尼会死,卡特曼会永生。
import threading
import time
import sys
import os
def kenny(num=0):
if num > 3:
# print("Kenny dies now...")
# raise SystemExit #Kenny will die, but Cartman will live forever
# sys.exit(1) #Same as above
print("Kenny dies and also kills Cartman!")
os._exit(1)
while True:
print("Kenny lives: {0}".format(num))
time.sleep(1)
num += 1
kenny(num)
def cartman():
i = 0
while True:
print("Cartman lives: {0}".format(i))
i += 1
time.sleep(1)
if __name__ == '__main__':
daemon_kenny = threading.Thread(name='kenny', target=kenny)
daemon_cartman = threading.Thread(name='cartman', target=cartman)
daemon_kenny.setDaemon(True)
daemon_cartman.setDaemon(True)
daemon_kenny.start()
daemon_cartman.start()
daemon_kenny.join()
daemon_cartman.join()
在Python 3.9中,你也可以使用:raise SystemExit("Because I said so")。
只要把quit()放在代码的末尾,就可以关闭一个python脚本。
而您通常应该更喜欢sys。退出,因为它对其他代码更“友好”,它实际上所做的只是引发一个异常。
如果你确定你需要立即退出一个进程,并且你可能处于某个异常处理程序中,这个异常处理程序会捕获SystemExit,那么还有另一个函数——os。_exit——它在C级立即终止,不执行任何正常的解释器分解;例如,在"atexit"模块中注册的钩子不会被执行。
from sys import exit
exit()
作为参数,您可以传递一个退出码,该退出码将返回给操作系统。默认值为0。