I have a script that runs as a
while True:
doStuff()
如果我需要停止脚本,但又不想在它执行操作时将其终止,那么与该脚本进行通信的最佳方法是什么?
I have a script that runs as a
while True:
doStuff()
如果我需要停止脚本,但又不想在它执行操作时将其终止,那么与该脚本进行通信的最佳方法是什么?
@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文件,应用程序将自动退出。即使同时运行多个相同的脚本实例,您也可以使用此方法仅关闭其中一个。它还会尝试清理自己的残留。
while True:
。dostuff
返回一个值并且该值为False
,则可以停止。我认为最优雅的方式是:
keep_running = true
while keep_running:
dostufF()
然后dostuff()
可以在不再需要继续运行时设置keep_running = false
,然后while循环结束,一切都会清理得很好。
try:
while True:
doStuff()
except KeyboardInterrupt:
doOtherStuff()
我认为这种方法的问题在于你无法控制执行何时以及在doStuff的哪个位置终止。
很久以前我实现了这样一个东西。它捕捉Ctrl+C
(或键盘中断)。它使用了我的包snuff-utils
。
安装方法:
pip install snuff-utils
from snuff_utils.graceful_exit import graceful_exit
while True:
do_task_until_complete()
if graceful_exit:
do_stuff_before_exit()
break
按下 Ctrl+C
将记录:
An interrupt signal has been received. The signal will be processed according to the logic of the application.