#-*- coding:utf-8 -*-
from ftplib import FTP
import os
def stp_1():
if os.system('ping -n 1 ftp.dedian.org') == 0:
try:
ftp = FTP('ftp.dedian.org')#返回FTP实例,给定host会自动执行connect方法
ftp.set_debuglevel(0)#默认0,不产生调试输出,1产生中等数量,通常每个请求一行,大于或等于2的值将产生最大的调试输出量,记录在控制连接上发送和接收的每一行
ftp.login()
ftp.getwelcome()
print(ftp.dir())#列出目录
ftp.cwd('devel')
print('<-------------------->')
print(ftp.retrlines('LIST'))#list directory contents
except Exception as e:
print(e)
else:
print('ping failed')
stp_1()
def stp_2():
ftp = FTP() #得到FTP实例ftp
if os.system('ping -n 1 192.168.2.5') == 0: #判断网络是否OK
ftp.set_debuglevel(1) #设置调试级别为2,显示详细信息
try: #网络的连接我们要永远认为是不可靠的
ftp.connect(host='192.168.2.5', port=21)#连接FTP服务器,最少要提供 host和port
ftp.login()#用户名以及密码,默认使用anonymous
print('<---------------->')
print(ftp.getwelcome())#打印欢迎信息
blocksize = 1024 # 实际传输的低级套接字对象上读取的最大块大小
print(ftp.dir())#默认进入pub上一级目录,因为vsftpd的默认FTP目录路径为 /var/ftp/pub
ftp.cwd('/pub') #切换到存放准备操作的文件目录pub
print(ftp.dir()) #显示本目录下的文件
with open('E:\ss.txt', 'wb') as fp: #在本地打开文件并写入
ftp.retrbinary('RETR sc.txt', fp.write, blocksize)#fp.write为回调函数, blocksize传递给回调函数最大的数据块(可选)
ftp.set_debuglevel(0) #关闭调试模式
ftp.quit()#退出ftp连接
except Exception as e:
print(e)
else:
print('网络不通')
stp_2()
正常下载完后调试信息为:resp ‘226 Transfer complete.’
如果调试信息出现下面错误,检查在执行ftp.retrbinary()方法时,文件名前是否有“RETR”参数
resp* ‘500 Unknown command.’
500 Unknown command.