在Python中优雅地退出程序?

Jam*_*mes 6 python

嘿所有,我有一个脚本运行作为

while True:
  doStuff()
Run Code Online (Sandbox Code Playgroud)

如果我需要停止它,那么与此脚本进行通信的最佳方式是什么,但如果它在操作过程中我不想杀死它?

谢谢!

S.L*_*ott 7

最好的方法是重写脚本,使其不使用while True:.

可悲的是,不可能推测一种终止这种方法的好方法.

你可以使用Linux信号.

您可以使用计时器并在一段时间后停止.

你可以dostuff返回一个值,如果值是,则停止False.

您可以检查本地文件,如果文件存在则停止.

您可以检查FTP站点以查找远程文件并停止该文件.

您可以检查HTTP网页以获取指示您的循环是应该停止还是不停止的信息.

您可以使用特定于操作系统的信息,例如信号量或共享内存.


Mic*_*son 7

而且我假设你的意思是从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()
Run Code Online (Sandbox Code Playgroud)

然后终止脚本只需删除myfile.xxx,应用程序就会退出.如果只需要关闭一个脚本,即使同时运行同一脚本的多个实例,也可以使用它.它试图自己清理....


Ban*_*i-T 5

我认为最优雅的是:

keep_running = true
while keep_running:
    dostufF()
Run Code Online (Sandbox Code Playgroud)

然后dostuff()可以设置,keep_running = false只要不再想继续运行,然后while循环结束,一切都很好地清理.