我有一个以
运行的脚本while True:
doStuff()
如果我需要停止它,那么与此脚本进行通信的最佳方式是什么?但是如果它处于操作过程中我不想杀死它?
答案 0 :(得分:7)
最好的方法是重写脚本,使其不使用while True:
。
可悲的是,不可能推测一种终止这种方法的好方法。
您可以使用Linux信号。
你可以使用计时器并在一段时间后停止。
您可以dostuff
返回一个值,如果值为False
则停止。
您可以检查本地文件,并在文件存在时停止。
您可以检查FTP站点以查找远程文件并停止该文件。
您可以在HTTP网页上查看指示您的循环是否应该停止或停止的信息。
您可以使用特定于操作系统的信息,例如信号量或共享内存。
答案 1 :(得分: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()
然后终止脚本只需删除myfile.xxx,应用程序就会退出。如果只需要关闭一个脚本,即使同时运行同一脚本的多个实例,也可以使用它。它试图自己清理....
答案 2 :(得分:5)
我认为最优雅的是:
keep_running = true
while keep_running:
dostufF()
然后dostuff()
可以设置keep_running = false
,只要不再想继续运行,然后while循环就会结束,并且所有内容都能很好地清理。
答案 3 :(得分:2)
如果这是一个控制台应用程序并按Ctrl + C退出就可以了,这可以解决您的问题吗?
try:
while True:
doStuff()
except KeyboardInterrupt:
doOtherStuff()
我猜这种方法的问题在于你不会确切地控制doStuff在何时何地终止执行。
答案 4 :(得分:-1)
信号模块可以捕获信号并做出相应的反应吗?