如何在Python中优雅退出程序?

6 投票
6 回答
5392 浏览
提问于 2025-04-15 18:16

我有一个脚本正在运行,

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网页上的信息,看看是否应该停止循环。

你还可以使用一些操作系统特有的东西,比如信号量或者共享内存。

撰写回答