我有一个python科学脚本,用于计算某种循环中的传热和流动动力学。每次通过循环时,它都会打印出有关脚本状态的一些信息。有了这些数据,我可以在运行时看到它是否是一个可行的模拟,或者有时在某个时候它变得不可行。
问题是,如何在不丢失数据的情况下停止脚本?因为在整个模拟结束时,我将打印出一些图表等,但我不想运行脚本,直到最后,当我已经看到时。所以我需要的是一些用户中断,比如ctrl + c。我想尝试捕获此键盘用户中断,然后转到模拟结束以绘制图形等。
顺便说一句,我在Spyder工作。
感谢您的任何建议或更复杂的解决方案,这里有一个小代码示例:
while i<10000:
calculated_data = i + i
print(calculated_data)
plt.plot(i,calculated_data)
所以通常我需要 10k 运行,但是当我看到 i=500 时,它变得不可行,但不想要松散的计算数据 (calculated_data(,我希望以某种方式中断用户。但我也不想每一步都问用户。
你试过吗
try:
while i<10000:
calculated_data = i + i
print(calculated_data)
except KeyboardInterrupt:
save_me(calculated_data)
raise
编辑:也许可以使用异步信号,例如在Unix环境中
was_interrupted = False
def receive_signal(signum, stack):
global was_interrupted
was_interrupted = True
signal.signal(signal.SIGUSR1, receive_signal)
for s in range(max_simulation):
params = next_parameterset()
while i < 10000:
calculated_data = i + 1
print(calculated_data)
if was_interrupted:
save_me(params, calculated_data)
was_interrupted = False
break
因此,当您看到内部循环需要中断时,您可以使用SIGUSR1杀死程序,然后它恢复外部循环。您可以从终端或其他读取用户输入并将os.kill()
信号发送到计算过程的 python 程序执行此操作。