首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列出具有pyftp - proftpd和pyftpdlib行为的文件

列出具有pyftp - proftpd和pyftpdlib行为的文件
EN

Stack Overflow用户
提问于 2015-07-08 11:42:36
回答 1查看 717关注 0票数 10

我有一个测试代码,它使用带有pyftpdlib的FTP存根,令我惊讶的是,它在生产中失败了。原因是proftpd响应NLST返回目录名。下面是来自pyftpdlib FTP存根的响应:

代码语言:javascript
复制
In [10]: local_conn.login('user', '12345')
Out[10]: '230 Login successful.'

In [11]: import ftplib

In [12]: local_conn = ftplib.FTP()

In [13]: local_conn.connect('localhost', 2121)
Out[13]: '220 pyftpdlib 1.4.0 ready.'

In [14]: local_conn.login('user', '12345')
Out[14]: '230 Login successful.'

In [15]: local_conn.nlst('structuredata_advanced')
Out[15]: 
['Report_20150618.csv',
 'Report_20150618.fin',
 'Report_20150619.csv',
 'Report_20150619.fin',
 'Report_20150620.csv',
 'Report_20150620.fin']

以下是来自proftpd的响应

代码语言:javascript
复制
In [16]: remote_conn = ftplib.FTP()

In [17]: remote_conn.connect('A1B.7Y.XX.XX', 21)
Out[17]: '220 ProFTPD 1.3.4a Server (vztd3.company.com) [A1B.7Y.XX.XX]'

In [18]: remote_conn.login('remoteuser', 'verysecret')
Out[18]: '230 User yougov logged in'

In [19]: remote_conn.nlst('structuredata_advanced')
Out[19]: 
['structuredata_advanced/Report_20150624.csv',
 'structuredata_advanced/Report_20150629.csv',
 'structuredata_advanced/Report_20150625.fin',
 'structuredata_advanced/Report_20150628.fin',
 'structuredata_advanced/Report_20150627.fin',
 'structuredata_advanced/Report_20150620.fin',
 'structuredata_advanced/Report_20150619.csv', 
  ...]

很容易删除这些目录名:

代码语言:javascript
复制
    # this code works both in production and testing 
    files = conn.nlst(basedir)
    # proftd is weired it returns the basedir name too
    files = [f.split('/')[-1] for f in files]

但是我想了解一下pyftpdlib做错了什么吗?

这是可以在ProFTPD中配置的吗?

关于FTP协议和NLST命令,我需要知道些什么吗?

更新

我刚刚测试了另一个名为uftpd的ftp服务器,它在发出NLST时的行为类似于pyftpdlib

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-12 19:30:41

我是uftpd的作者。

我只是在谷歌上搜索了一下,结果发现DJB写了这个在一段时间前就出现了,不幸的是,服务器之间的输出似乎有所不同。

不过,我的解释是:建议不要在给定目录中的每个输出文件前加上目录名。也就是说,如果客户端发送'NLST dir‘,服务器不应该回复:

代码语言:javascript
复制
dir/a
dir/b

但是,只需输出目录dir/中的文件,如下所示:

代码语言:javascript
复制
a
b
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31291617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档