我目前有基本上运行一个无限循环的同时,从用户那里收集数据的代码。不断更新的基于文本文件的内容词典/名单。以供参考:
while (True):
IDs2=UpdatePoints(value,IDs2)
time.sleep(10)
基本上,我的问题是,我不知道什么时候我想这是结束,但是这个while循环后运行我想用收集到的信息,而不是崩溃我的程序失去它。有一个简单,优雅的方式来简单地退出while循环的进行,每当我想要的吗?类似按下我的键盘上的某个键的东西将是真棒。
你可以试试/包装的代码在try块除外,因为键盘中断是公正的例外情况:
try:
while True:
IDs2=UpdatePoints(value,IDs2)
time.sleep(10)
except KeyboardInterrupt:
print('interrupted!')
然后,你可以退出与CTRL-C循环。
你可以使用异常。但是,你应该只使用例外是不应该发生的东西。所以,不是这个。
这就是为什么我建议的信号:
import sys, signal
def signal_handler(signal, frame):
print("\nprogram exiting gracefully")
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
你应该把这个程序的开始,当你按下Ctrl + C无论在你的程序将正常关闭
代码解释:
您导入sys
和signals
。然后你做出退出执行的函数。 sys.exit(0)
停止,退出代码为0(即表示该代码,一切都很好)编程。
当程序得到SIGINT或者通过CTRL-C或在终端kill命令你正常程序将关闭。
我认为,最简单的解决办法是捕捉KeyboardInterrupt的interrupt key is pressed时,并用它来确定何时停止循环。
except KeyboardInterrupt:
break
寻找这个异常的缺点是,它可以防止用户终止程序,而循环仍在运行。
我使用Python来跟踪股票价格,在我的投资组合自动提交买入/卖出指令。长话短说,我希望我的跟踪程序来ping的信息断收集到的信息的数据服务器,并进行交易,但我也想保存以供将来参考股票的数据,在上面的能够启动/停止程序每当我想要的。
什么结束了,我的工作是以下几点:
trigger = True
while trigger == True:
try:
(tracking program and purchasing program conditions here)
except:
trigger = False
print('shutdown initialized')
df = pd.DataFrame...
save all the datas
print('shutdown complete')
等等
从这里开始,而计划是永远循环发送垃圾邮件远离从我的经纪人的API数据请求,使用CTRL-C键盘中断功能切换的例外试循环,勾销while循环,使脚本来完成数据节能协议,而不使整个脚本突然停止。
希望这可以帮助!