我如何退出一个脚本早,像die()命令在PHP?
当前回答
我完全是个新手,但这肯定更干净,更可控
def main():
try:
Answer = 1/0
print Answer
except:
print 'Program terminated'
return
print 'You wont see this'
if __name__ == '__main__':
main()
...
程序终止
than
import sys
def main():
try:
Answer = 1/0
print Answer
except:
print 'Program terminated'
sys.exit()
print 'You wont see this'
if __name__ == '__main__':
main()
...
程序终止回溯(最近一次调用):文件“Z:\目录\testdieprogram.py”,第12行,在 main()文件“Z:\目录\testdieprogram.py”,第8行,在main中 SystemExit sys.exit ()
Edit
重点是,该计划顺利和平地结束,而不是“我已经停止!!!!”
其他回答
我刚刚发现,在编写多线程应用程序时,引发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()
我完全是个新手,但这肯定更干净,更可控
def main():
try:
Answer = 1/0
print Answer
except:
print 'Program terminated'
return
print 'You wont see this'
if __name__ == '__main__':
main()
...
程序终止
than
import sys
def main():
try:
Answer = 1/0
print Answer
except:
print 'Program terminated'
sys.exit()
print 'You wont see this'
if __name__ == '__main__':
main()
...
程序终止回溯(最近一次调用):文件“Z:\目录\testdieprogram.py”,第12行,在 main()文件“Z:\目录\testdieprogram.py”,第8行,在main中 SystemExit sys.exit ()
Edit
重点是,该计划顺利和平地结束,而不是“我已经停止!!!!”
在Python 3.9中,你也可以使用:raise SystemExit("Because I said so")。
只要把quit()放在代码的末尾,就可以关闭一个python脚本。
问题
在我的实践中,甚至有一种情况需要从其中一个进程中杀死整个多处理器应用程序。
如果您的应用程序使用唯一的主进程,那么以下函数可以很好地工作。但是在我的例子中,下列函数没有一个不能工作,因为应用程序还有许多其他活动进程。
辞职() 退出(0) os._exit (0) sys.exit (0) Os.kill (os.getppid(), 9) -其中os.getppid()是父进程的pid
最后一个进程杀死了主进程和它自己,但其余进程仍然存活。
解决方案
我不得不通过外部命令杀死它,最后使用pkill找到解决方案。
import os
# This can be called even in process worker and will kill
# whole application included correlated processes as well
os.system(f"pkill -f {os.path.basename(__file__)}")
推荐文章
- 在python中,在函数结束(例如检查失败)之前退出函数(没有返回值)的最佳方法是什么?
- 在Python中检查一个单词是否在字符串中
- Python glob多个文件类型
- 如何可靠地打开与当前运行脚本在同一目录下的文件
- Python csv字符串到数组
- 如何在Python中进行热编码?
- 如何嵌入HTML到IPython输出?
- 在Python生成器上使用“send”函数的目的是什么?
- 是否可以将已编译的.pyc文件反编译为.py文件?
- Django模型表单对象的自动创建日期
- 在Python中包装长行
- 如何计算两个时间串之间的时间间隔
- 我如何才能找到一个Python函数的参数的数量?
- 您可以使用生成器函数来做什么?
- 将Python诗歌与Docker集成