Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:在不丢失数据的情况下使用控件停止skcript_Python_Database_User Controls_Spyder_Experimental Design - Fatal编程技术网

Python:在不丢失数据的情况下使用控件停止skcript

Python:在不丢失数据的情况下使用控件停止skcript,python,database,user-controls,spyder,experimental-design,Python,Database,User Controls,Spyder,Experimental Design,我有一个python科学脚本,用于计算循环中运行的某种传热和流动动力学。每次通过循环时,它都会打印出一些关于脚本状态的信息。有了这些数据,我可以在运行时看到它是否是一个可行的模拟,或者有时在某个点上它变得不可行 问题是,如何在不丢失数据的情况下停止脚本?因为在整个模拟结束时,我会打印出一些图表等,但我不想运行脚本,直到最后,当我已经看到。所以我需要的是一些用户中断,比如ctrl+c。我想尝试捕捉这个键盘用户中断,然后转到模拟的末尾绘制图形等 顺便说一句,我在Spyder工作 感谢您的建议或更复杂

我有一个python科学脚本,用于计算循环中运行的某种传热和流动动力学。每次通过循环时,它都会打印出一些关于脚本状态的信息。有了这些数据,我可以在运行时看到它是否是一个可行的模拟,或者有时在某个点上它变得不可行

问题是,如何在不丢失数据的情况下停止脚本?因为在整个模拟结束时,我会打印出一些图表等,但我不想运行脚本,直到最后,当我已经看到。所以我需要的是一些用户中断,比如ctrl+c。我想尝试捕捉这个键盘用户中断,然后转到模拟的末尾绘制图形等

顺便说一句,我在Spyder工作

感谢您的建议或更复杂的解决方案,这里有一个小代码示例:

while i<10000:
    calculated_data = i + i
    print(calculated_data)

plt.plot(i,calculated_data)
而我你试过了吗

try:
    while i<10000:
        calculated_data = i + i
        print(calculated_data)
except KeyboardInterrupt:
    save_me(calculated_data)
    raise
试试看:

而iyou可以将计算出的数据存储在某个地方。可能在sqlite中?是的,这是我唯一想到的方法,但我认为可能会有更好的选择,甚至是用户定义的shortcutsOkay,当重新考虑它对我的应用程序不方便时。我实际上有两个循环,因为内循环运行科学模拟,外循环使用不同的参数集多次运行模拟。因此,我想跳过一次内部循环运行,但下一次运行仍不受影响。比如每50次运行等待用户输入5秒钟。所以,若用户并没有点击“中止”,它将继续。
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