检查FTP连接是否已成功打开,文件是否已通过Python

时间:2017-10-22 08:30:41

标签: python python-3.x error-handling ftp ftplib

我正在制作一台远程延时相机,每半小时拍照并通过FTP发送到我的服务器。 Raspberry Pi将控制相机,收集文件并通过Python脚本发送它们,如下所示:

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

我的问题与此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('/')

我需要的是两件事:

  1. 确认文件已成功上传的方法,例如上传(真/假)'是否触发'删除'功能

  2. 如果由于某种原因无法建立连接,则跳过上传过程和NOT REMOVE文件的方法。就像一个超时,一个10秒钟的窗口,它试图建立连接,如果它不能,它会同时跳过“上传”#39;和'删除'因此,在本地存储文件,并在while循环的下一次迭代中再次尝试。

  3. 提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

代码会抛出错误。因此,如果连接失败,上传将不会发生。同样,如果delete失败,则不会调用upload

你所要做的就是在你的无限循环中捕捉任何异常,这样它就不会破坏:

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