如何在Python中优雅退出程序?
我有一个脚本正在运行,
while True:
doStuff()
如果我想停止这个脚本,但又不想在它正在执行某个操作的时候强行结束它,最好的方法是什么呢?
6 个回答
5
我觉得最简单优雅的写法是:
keep_running = true
while keep_running:
dostufF()
然后,dostuff()
可以在不想继续运行的时候,把 keep_running = false
设置为假,这样 while 循环就会结束,所有的东西也能很干净地收尾。
9
我猜你是说从Python脚本外部结束它。
我发现最简单的方法是
@atexit.register
def cleanup()
sys.unlink("myfile.%d" % os.getpid() )
f = open("myfile.%d" % os.getpid(), "w" )
f.write("Nothing")
f.close()
while os.path.exists("myfile.%d" % os.getpid() ):
doSomething()
然后要结束这个脚本,只需要删除myfile.xxx,应用程序就会自动退出。即使同时运行了多个相同的脚本,你也可以只关闭其中一个。而且它会尽量自己清理一些东西……
7
最好的办法是重写这个脚本,让它不使用 while True:
这种写法。
可惜的是,没办法想出一个好的方法来结束这个循环。
你可以使用Linux的信号。
你可以设置一个定时器,过一段时间后停止。
你可以让 dostuff
函数返回一个值,如果这个值是 False
就停止。
你可以检查一个本地文件,如果这个文件存在就停止。
你可以检查一个FTP网站上的远程文件,如果这个文件存在就停止。
你可以检查一个HTTP网页上的信息,看看是否应该停止循环。
你还可以使用一些操作系统特有的东西,比如信号量或者共享内存。