嘿所有,我有一个脚本运行作为
while True:
doStuff()
Run Code Online (Sandbox Code Playgroud)
如果我需要停止它,那么与此脚本进行通信的最佳方式是什么,但如果它在操作过程中我不想杀死它?
谢谢!
最好的方法是重写脚本,使其不使用while True:.
可悲的是,不可能推测一种终止这种方法的好方法.
你可以使用Linux信号.
您可以使用计时器并在一段时间后停止.
你可以dostuff返回一个值,如果值是,则停止False.
您可以检查本地文件,如果文件存在则停止.
您可以检查FTP站点以查找远程文件并停止该文件.
您可以检查HTTP网页以获取指示您的循环是应该停止还是不停止的信息.
您可以使用特定于操作系统的信息,例如信号量或共享内存.
而且我假设你的意思是从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,应用程序就会退出.如果只需要关闭一个脚本,即使同时运行同一脚本的多个实例,也可以使用它.它试图自己清理....
我认为最优雅的是:
keep_running = true
while keep_running:
dostufF()
Run Code Online (Sandbox Code Playgroud)
然后dostuff()可以设置,keep_running = false只要不再想继续运行,然后while循环结束,一切都很好地清理.