您好我正尝试使用python 2.7从FTPS下载文件。下面是我的代码在这里我正在控制普通的IO错误。虽然此代码在UNIX和Python 2.7上运行。我试着用相同的代码和它的工作正常。但在unix上,它不能像例外那样工作。I/O错误(0):使用python从ftps下载文件时出错2.7无法从FTPS下载文件
没有得到我所犯的错误。
#!/usr/bin/env python
import ftplib
import os
import datetime
import sys
from ftplib import FTP_TLS
try:
ftps = FTP_TLS(server)
ftps.debug(3)
ftps.connect(host=server,port=portno)
ftps.auth()
ftps.login(username, password)
ftps.prot_p()
ftplogin=True
except Exception, e:
logger.error(e)
# Change to the proper directory
if ftplogin:
try:
ftps.cwd(directory)
filelist = [] #to store all files
ftps.retrlines('LIST',filelist.append) # append to list
is_file_exist=False
if len(filelist)>0 :#do something
is_file_exist = True
if is_file_exist :
print "file exist"
##Loop through matching files and download each one individually
try:
for filename in ftps.nlst(filematch):
local_filename = os.path.join(downloadpath, filename)
fhandle = open(local_filename, 'wb')
logger.info('Getting ' + filename)
ftps.retrbinary('RETR ' + filename, fhandle.write)
fhandle.close() #
ftps.quit()
logger.info("File download successfull")
except Exception , e:
print e
logger.error(e)
else :
logger.info("There is no file for processing")
except IOError as eo:
print "I/O error ({0}):{1}".format(eo.errno,eo.strerror)
except Exception, e:
directoryFound=False
logger.error(e)
print e
except :
print "Unexpected erro:", sys.exc_info()[0]
注:请忽略缩进,因为我在这里和复制代码,它在适当的的.py格式的文件
代码与下面的错误
Abc.txt*
Abc1.txt*
*get* '220 208.235.248.3 FTP server ready\r\n'
*resp* '220 208.235.248.3 FTP server ready'
*cmd* 'AUTH TLS'
*put* 'AUTH TLS\r\n'
*get* '234 AUTH TLS successful\r\n'
*resp* '234 AUTH TLS successful'
*cmd* 'USER Username'
*put* 'USER Username \r\n'
*get* '331 Password required for Username.\r\n'
*resp* '331 Password required for Username.'
*cmd* 'PASS ********'
*put* 'PASS ********\r\n'
*get* '230 User Username logged in.\r\n'
*resp* '230 User Username logged in.'
*cmd* 'PBSZ 0'
*put* 'PBSZ 0\r\n'
*get* '200 PBSZ 0 successful\r\n'
*resp* '200 PBSZ 0 successful'
*cmd* 'PROT P'
*put* 'PROT P\r\n'
*get* '200 Protection set to Private\r\n'
*resp* '200 Protection set to Private'
2012-09-12 05:01:54,029 - __main__ - INFO - Server login successful
changeing directory
*cmd* 'CWD /prod/hm'
*put* 'CWD /prod/hm\r\n'
*get* '250 CWD command successful.\r\n'
*resp* '250 CWD command successful.'
Directory changed/prod/hm
filelist init
*cmd* 'TYPE A'
*put* 'TYPE A\r\n'
*get* '200 Type set to A\r\n'
*resp* '200 Type set to A'
*cmd* 'PASV'
*put* 'PASV\r\n'
*get* '227 Entering Passive Mode (208,235,248,3,232,171).\r\n'
*resp* '227 Entering Passive Mode (208,235,248,3,232,171).'
*cmd* 'NLST'
*put* 'NLST\r\n'
*get* '150 Opening ASCII mode data connection for file list\r\n'
*resp* '150 Opening ASCII mode data connection for file list'
*retr* 'Abc.txt\r\n'
*retr* 'Abc1.txt\r\n'
*retr* ''
I/O error (0):Error
打破我修改了文件名称和FTPS的安全细节。 :)
我尝试了很多选择,但没有解决方法。如果我改变这与FTP的coed,并要求更改代码如注释ftps.auth(),ftps.prot_p(),然后它工作正常,但FTPS不起作用。
我没有得到错误以及探索 没有信息可在网上为我搜索很多,但没有解决 请帮我使用过FTPLIB类ftp_tls和python2.7上
unix
在Windows中工作正常,无需更改任何内容。欲了解更多信息,请参阅此 http://bugs.python.org/issue4791 http://bugs.python.org/issue3826 –