我有一个函数可以启动一个在后台运行的命令,如下所示:
import subprocess
import threading
import time
import sys
def server():
def launch_server():
init = ['something']
p = subprocess.Popen(init)
while p.poll() is None:
try:
time.sleep(0.5)
except KeyboardInterrupt:
print ("Ctrl-c was requested")
sys.exit(0)
else:
launch_server()
thread = threading.Thread(target=launch_server)
thread.start()
return
我使用poll()来知道它是否正在运行,并且我使用线程以便此函数不会阻止我的代码。现在,如果我使用init
杀死killall init
,则while
循环可以重新启动init
。但是,如果我按Ctrl-c
,应用程序不会死亡。实际上,它重新启动,阻止这种情况的唯一方法是使用活动监视器(我在Mac OSX上)终止。我没有看到我的代码的try
部分出现了什么问题。我应该补充一点,这是我第一次面对线程的使用(也许这就是问题?)。如果有人能告诉我错误是什么,我会很高兴。提前致谢。
更新
在@zondo评论之后,我发现解决这个问题很容易。我不得不补充道:
thread.daemon = True
在thread.start()
之前见the documentation here。