2017-10-22 14 views
1

30分ごとに写真を撮ってFTP経由で私のサーバーに送る遠隔タイムラプスカメラを構築しています。ラズベリーパイはそうのようなPythonスクリプトを経由して、カメラを制御ファイルを収集し、それらを介して送信されます:FTP接続が正常に終了し、ファイルがPythonでFTPにアップロードされたことを確認してください

while true 
    captureImages() 
    renameFiles(picID) 
    upload() #uploads any files and folders in the selected path 
    delete() #deletes the uploaded files from the pi 

私の質問は、(OK作品)このupload機能とそれに続くdelete機能に関係しています

私はここに必要なもの
def upload():#sends the file to server 
    print ("connecting") 
    #ftp connection (server, user,pass) 
    ftp = ftplib.FTP('server','user','pass') 

    #folder from which to upload 
    template_dir = '/home/pi/captures/' 

    print ("uploading") 
    #iterate through dirs and files 
    for root, dirs, files in os.walk(template_dir, topdown=True): 
     relative = root[len(template_dir):].lstrip(os.sep) 
     #enters dirs 
     for d in dirs: 
      ftp.mkd(os.path.join(relative, d)) 
     #uploads files 
     for f in files: 
      ftp.cwd(relative) 
      ftp.storbinary('STOR ' + f, open(os.path.join(template_dir, relative, f), 'rb')) 
      ftp.cwd('/') 

二つのものです:ファイルはBOOL「のような、正常にアップロードされていることを確認する

  1. 方法UPLO (true/false) 'を指定して' remove '関数をトリガーするかどうかを指定します。

  2. アップロードプロセスをスキップし、何らかの理由で接続が確立できない場合はファイルを削除しない方法です。タイムアウトと同様に、接続を確立しようとする10秒間のウィンドウで、「アップロード」と「削除」の両方をスキップしてファイルをローカルに格納し、whileループの次の反復で再度試行します。

ありがとうございました!

+0

コードに誤りが発生します。 'upload'が失敗した場合、' delete'は呼び出されません。 –

+0

その問題は、ループがその場合に壊れるため、カメラが撮影を停止することです。 – mrc

+0

ループ内で例外をキャッチします。 –

答えて

0

コードに誤りが発生します。接続が失敗した場合、アップロードは行われません。同様に、uploadが失敗した場合、deleteは呼び出されません。

あなたがしなければならないのは、それが壊れないように、あなたの無限ループ内の任意の例外をキャッチすることです:

while true 
    try: 
     captureImages() 
     renameFiles(picID) 
     upload() #uploads any files and folders in the selected path 
     delete() #deletes the uploaded files from the pi 
    except: 
     print("Error:", sys.exc_info()[0]) 

Handling exceptions in Pythonをお読みください。

+0

ありがとう、私はそれを見てみましょう! – mrc

関連する問題