您好我正在尝试使用 python 2.7 从 FTPS 下载文件。下面是我的代码这里我正在门控正常的 IO 错误。虽然此代码在 UNIX 和 Python 2.7 上运行。我尝试在具有相同代码的 Windows 上运行良好。但是在 unix 上它不能正常工作。
没有得到我做错的地方。
#!/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 并进行需要代码更改,例如 Comment ftps.auth()、ftps.prot_p(),那么它可以正常工作,但 FTPS 无法正常工作。
我也没有得到错误来探索互联网上没有可用的信息,因为我搜索了很多但没有解决方案请帮助</p>
我在 ftp_tls 类上使用 ftplib,在 unix 上使用 python2.7