退出Python而True循环

时间:2017-08-09 20:21:28

标签: python-3.x dropbox-api

我在覆盆子pi上使用温度传感器(HS18B20)。大约每隔一秒,温度被记录到电子表格中并使用while循环发送到Dropbox。它会永远这样做,直到按下ctrl + c。为了上传到Dropbox,我不能拥有与另一个文件相同的文件名。该程序将给出错误并停止。显然,我可以简单地创建一个每次都有不同名称的文件,但为了在dropbox上有数百个不同的文件,我会删除dropbox上的文件并立即将新的电子表格上传到dropbox。我对这种技术没有任何问题,除了一件事......

如果在删除文件后立即通过ctrl + c停止程序,并且在上传文件期间,新文件不会上传,只会在dropbox上删除(本地.xls文件永远不会被删除;刚刚更换了)。

toc = time.strftime("%b %-d, %Y. %H:%M:%S")
dbx.files_delete('/Temperature Data ' + toc + '.xls')
with open(time.strftime("%m_%d_%Y") + '.xls', "rb") as f:
    dbx.files_upload(f.read(), '/Temperature Data ' + toc + '.xls')
print("Uploaded to Dropbox")

我以为我设置了一个故障保险箱,但它仍然不起作用。

以下是我的代码中的代码段。

def signal_handler(signal, frame):
    signal interrupted
    interrupted = True
signal.signal(signal.SIGINT, signal_handler)
interrupted = False

...

while True:
        print("Temperature Taken")
                a += 1
                c += 1
                if temp_f < input_bad:
                        ws.write(a,0,temp_f)
                        ws.write(a,1,time.strftime("%H:%M:%S %p"))
                        ws.write(a,2,"YES")

                while c % 6 == 0:                                 
                        c += 1                                          
                        dbx.files_delete('/Temperature Data ' + toc + '.xls')
                        with open(time.strftime("%m_%d_%Y") + '.xls', "rb") as f:
                                dbx.files_upload(f.read(), '/Temperature Data ' + toc + '.xls')
                        print("Uploaded to Dropbox")
                        if interrupted:
                                print("Saving...")
                                dbx.files_delete('/Temperature Data ' + toc + '.xls')
                                with open(time.strftime("%m_%d_%Y") + '.xls',"rb") as f:
                                        dbx.files_upload(f.read(), '/Temperature Data ' + toc + '.xls')
                                quit()

如果在程序读取温度读数时按c + + c程序,没问题!程序完成循环,直到c%6 == 0,然后保存并关闭。

如果我在保存时按c + + c程序,是的问题......

我可以在保存时打印(“不要关闭程序”),但我想让这个白痴证明。

任何提示?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以在处理结束时注册信号处理程序并退出循环。

import signal
import sys

userQuitRequested = False

def signal_handler(signal, frame):
        print('You pressed Ctrl+C!')
        userQuitRequested = True
signal.signal(signal.SIGINT, signal_handler)
print('Press Ctrl+C to quit')

然后,您可以在适当的时间检查循环中的userQuitRequestedbreak True