我在我的覆盆子pi上使用溫度傳感器(HS18B20)。每隔大約一秒鐘,溫度被記錄到電子表格上,並使用一段時間的True循環發送到Dropbox。它會一直這樣做,直到ctrl + c被按下。爲了上傳到保管箱,我不能擁有與其他文件相同的文件名。該程序會給出錯誤並停止。顯然,我可以簡單地創建一個名稱不同的文件,但要在Dropbox上打擊數百個不同的文件,我會刪除Dropbox上的文件並立即將新電子表格上傳到Dropbox。我對這種技術沒有任何問題,除了一件事...正在退出Python While True
如果通過ctrl + c在文件被刪除後立即停止該程序,並且在上傳文件的過程中,新文件不會上傳並且只能在保管箱中刪除(本地.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()
如果我CTRL + C程序,而它的採取的溫度讀數,沒問題!該程序完成其循環,直到c%6 == 0,然後保存並關閉。
如果我CTRL + C程序,而其節能,是問題......
我可以只打印(「不要關閉程序」)時,其省電,但我想使這個白癡證明。
任何提示?謝謝!
或者,您可以傳遞['WriteMode.overwrite'](https://dropbox-sdk-python.readthedocs.io/en/latest/moduledoc.html#dropbox.files.WriteMode.overwrite)或[' WriteMode.update'](https://dropbox-sdk-python.readthedocs.io/en/latest/moduledoc.html#dropbox.files.WriteMode.update)至['files_upload']的'mode'參數(HTTPS ://dropbox-sdk-python.readthedocs.io/en/latest/moduledoc.html#dropbox.dropbox.Dropbox.files_upload)完全避免這種可能性。 (也就是說,讓您不必刪除現有的文件,開始使用。) – Greg