我正在制作一台远程延时相机,每半小时拍照并通过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('/')
我需要的是两件事:
确认文件已成功上传的方法,例如上传(真/假)'是否触发'删除'功能
如果由于某种原因无法建立连接,则跳过上传过程和NOT REMOVE文件的方法。就像一个超时,一个10秒钟的窗口,它试图建立连接,如果它不能,它会同时跳过“上传”#39;和'删除'因此,在本地存储文件,并在while循环的下一次迭代中再次尝试。
提前感谢您的帮助!
答案 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])