python3 ftp.mlsd_python访问ftp | 学步园

python访问ftp服务器

使用资源:ftplib.FTP(通过from ftplib import FTP导入即可使用),ftplib模块定义了两个主要的类:FTP和FTP_TLS,FTP_TLS为FTP的子类,增加了部分接口

FTP class

一般使用FTP的实例连接ftp服务器就足够使用了,ftp传输文件模式有text和binary两种。有以下几个主要方法

FTP([host[, user[, passwd[, acct[, timeout]]]]])

全部参数都是可选的,如果给定了host,FTP将自己调用connect(host[, port[, timeout]])方法连接ftp服务器,此时默认的port为21。如果给定了user,FTP会自动调用login([user[, passwd[, acct]]])方法登录ftp服务器。timeout的单位为秒

set_debuglevel(level)

设置调试级别,0:没有调试信息输出,1:适度的调试信息,2或者更大的数字:最大化的调试信息

connect(host[, port[, timeout]])

连接到host,默认的port为21。

注意:

1.该方法只能调用一次,如果初始化FTP实例时指定了host参数则不需要调用该方法

2.其他有关ftp操作的方法只能在调用该方法成功后才能执行

getwelcome()

获取欢迎字符串

login([user[, passwd[, acct]]])

使用user,passwd登录,默认的user为'anonymous'(即匿名登录),此时passwd为'anonymous@',acct为’’;如果指定了user,则passwd和acct默认均为’’

注意:

1.该方法只能调用一次,如果在初始化FTP实例时给定了user参数就不需要调用该方法

abort()

中止正在处理的文件,python2.7.6文档中提到:“Using this does not always work, but it’s worth a try.”

sendcmd(command)

发送简单的命令字符串到ftp服务器,返回应答字符串

voidcmd(command)

发送简单的命令字符串到ftp服务器,并处理回应。如果为成功回应码(200-299),则不返回任何信息,如果不是则抛出error_reply异常

retrbinary(command, callback[, maxblocksize[, rest]])

command为’RETR filename’,callback为一个回调函数,接收一个参数,将命令执行结果的每个block传入进行相应的处理(比如可以传入open(filename,’wb’).write将服务器上的文件内容写入到本地的filename里面);maxblocksize和rest可以不指定,有自己的默认值

retrlines(command[, callback])

与retrbinary对应,处理text版本,支持更多的命令,主要有:

LIST:返回当前目录下的全部文件信息

NLST:返回当前目录下的全部文件名

MLSD:retrieves a machine readable list of files and information about those files

callback将处理命令执行结果的每一行(按CRLF分隔)

set_pasv(boolean)

设定被动模式

storbinary(command, file[, blocksize, callback, rest])

将本地文件按binary方式上传到ftp服务器,此处的command应该为“STOR filename”,filename为保存到ftp服务器当前目录下后的文件名,file为open方法打开的文件对象(是指是调用file的read方法,直到遇到文件尾)。callback接收一个参数,将每个发送成功后block传入

storlines(command, file[, callback])

按ASCII模式存放一个文件到ftp服务器,将调用file的readline方法读取全部的行直到文件结束符。callback回调函数接收一个参数处理readline读取到的数据(发送成功后)

注意:上传文件到ftp服务器涉及到写权限,有以下两点:

1.当前路径的权限,可以通过命令“chmod -R 777currentDir”

2.selinux问题,按下图解决

Figure 7selinux导致文件无法上传到ftp服务器问题解决

transfercmd(cmd[, rest])

后续更新

ntransfercmd(cmd[, rest])

后续更新

nlst(argument[, ...])

与retrlines(command[, callback])传入NSLT参数返回结果一致

dir(argument[, ...])

列出指定目录(默认为当前目录)下全部文件的信息

rename(fromname, toname)

重命名文件

delete(filename)

删除文件

cwd(pathname)

设定ftp服务器上的当前工作目录

mkd(pathname)

创建目录

pwd()

打印当前目录

rmd(dirname)

删除目录

size(filename)

获取文件大小,单位:byte,成功返回int,否则返回None(SIZE命令不是标准的)

quit()

发送QUIT命令到ftp服务器,关闭连接,可能会抛出异常

close()

关闭连接,不应该对一个已经成功关闭的实例上(例如已经成功执行了quit方法的实例)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明
from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handlers import FTPHandler,ThrottledDTPHandler from pyftpdlib.servers import FTPServer from pyftpdlib.log import LogFormatter import logging import configparser import pyftpdlib logger = logging.getLogger() logger.setLevel(logging.INFO) ch = logging.StreamHandler() fh = logging.FileHandler(filename='myftpserver.log',encoding='GBK') ch.setFormatter(LogFormatter()) fh.setFormatter(LogFormatter()) logger.addHandler(ch) logger.addHandler(fh) authorizer = DummyAuthorizer() authorizer.add_user("user", "12345", "d:/", perm="elradfmw") ENABLE_ANONYMOUS = 'on' if ENABLE_ANONYMOUS == 'on': authorizer.add_anonymous("d:/") handler = FTPHandler handler.authorizer = authorizer handler.passive_ports = range(8300, 8500) dtp_handler = ThrottledDTPHandler upload = 100 * 1024 #100kb/s download = 100 * 1024 #100kb/s dtp_handler = ThrottledDTPHandler dtp_handler.read_limit = download dtp_handler.write_limit = upload ip = '0.0.0.0' port = '21' server = FTPServer((ip, port), handler) Max_con = 100 server.max_per_ip = 10 server.max_cons = Max_con server.max_cons_per_ip =server.max_per_ip server.serve_forever() #创建文件 import ftplib from io import StringIO import io from ftplib import FTP ftp = FTP(host='localhost',user='user',passwd='12345') ftp.cwd('test') ftp.storlines('STOR poem.txt',io.StringIO('') ) ftp.quit() #写入数据 from io import StringIO import io from ftplib import FTP ftp = FTP(host='localhost',user='user',passwd='12345') ftp.cwd('test') binary_data = b'Hello, world!' text = binary_data.decode('utf-8') data_as_bytes = text.encode('utf-8') ftp.storlines('STOR test.txt',io.BytesIO(data_as_bytes)) #上传下载文件 from ftplib import FTP ftp = FTP(host='localhost',user='user',passwd='12345') ftp.encoding = 'gbk' ftp.cwd('test') ftp.retrlines('LIST') ftp.retrbinary('RETR poem.txt', open('poem.txt', 'wb').write) ftp.storbinary('STOR ftpserver.py', open('ftpserver.py', 'rb')) for f in ftp.mlsd(path='/test'): print(f)这段代码的数据处理分析
05-18
这段代码实现了一个基于pyftpdlib的FTP服务器,并提供了创建文件、写入数据和上传下载文件的功能。具体分析如下: 1. 导入模块 ``` from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handlers import FTPHandler,ThrottledDTPHandler from pyftpdlib.servers import FTPServer from pyftpdlib.log import LogFormatter import logging import configparser import pyftpdlib ``` 导入pyftpdlib的相关模块以及其他需要用到的模块。 2. 配置日志 ``` logger = logging.getLogger() logger.setLevel(logging.INFO) ch = logging.StreamHandler() fh = logging.FileHandler(filename='myftpserver.log',encoding='GBK') ch.setFormatter(LogFormatter()) fh.setFormatter(LogFormatter()) logger.addHandler(ch) logger.addHandler(fh) ``` 创建一个logger对象并设置日志级别为INFO,同时将日志输出到控制台和myftpserver.log文件中。 3. 创建用户 ``` authorizer = DummyAuthorizer() authorizer.add_user("user", "12345", "d:/", perm="elradfmw") ENABLE_ANONYMOUS = 'on' if ENABLE_ANONYMOUS == 'on': authorizer.add_anonymous("d:/") ``` 使用DummyAuthorizer创建一个虚拟用户,用户名为"user",密码为"12345",根目录为"d:/",并设置其权限为elradfmw。如果允许匿名访问,则使用add_anonymous方法添加一个匿名用户。 4. 配置FTP服务器 ``` handler = FTPHandler handler.authorizer = authorizer handler.passive_ports = range(8300, 8500) dtp_handler = ThrottledDTPHandler upload = 100 * 1024 #100kb/s download = 100 * 1024 #100kb/s dtp_handler = ThrottledDTPHandler dtp_handler.read_limit = download dtp_handler.write_limit = upload ip = '0.0.0.0' port = '21' server = FTPServer((ip, port), handler) Max_con = 100 server.max_per_ip = 10 server.max_cons = Max_con server.max_cons_per_ip =server.max_per_ip server.serve_forever() ``` 创建一个FTPHandler对象,并将其authorizer属性设置为上面创建的虚拟用户。同时设置被动模式端口范围和上传下载速度限制。指定FTP服务器的IP地址和端口号,并设置最大连接数和每个IP地址的最大连接数。最后,调用serve_forever方法启动FTP服务器。 5. 创建文件 ``` import ftplib from io import StringIO import io from ftplib import FTP ftp = FTP(host='localhost',user='user',passwd='12345') ftp.cwd('test') ftp.storlines('STOR poem.txt',io.StringIO('') ) ftp.quit() ``` 使用ftplib创建一个FTP对象,然后登录FTP服务器。调用cwd方法进入test目录,使用storlines方法创建一个空的poem.txt文件。 6. 写入数据 ``` from io import StringIO import io from ftplib import FTP ftp = FTP(host='localhost',user='user',passwd='12345') ftp.cwd('test') binary_data = b'Hello, world!' text = binary_data.decode('utf-8') data_as_bytes = text.encode('utf-8') ftp.storlines('STOR test.txt',io.BytesIO(data_as_bytes)) ``` 调用storlines方法将数据写入test.txt文件中。 7. 上传下载文件 ``` from ftplib import FTP ftp = FTP(host='localhost',user='user',passwd='12345') ftp.encoding = 'gbk' ftp.cwd('test') ftp.retrlines('LIST') ftp.retrbinary('RETR poem.txt', open('poem.txt', 'wb').write) ftp.storbinary('STOR ftpserver.py', open('ftpserver.py', 'rb')) for f in ftp.mlsd(path='/test'): print(f) ``` 使用retrlines方法获取test目录下的文件列表,并使用retrbinary方法下载poem.txt文件,使用storbinary方法上传ftpserver.py文件。最后,使用mlsd方法获取test目录下的文件列表,并打印出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值