使用Python的FTP库来检索文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Python的FTP库来检索文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3135字,纯文字阅读大概需要5分钟。
内容图文
![使用Python的FTP库来检索文件](/upload/InfoBanner/zyjiaocheng/751/cc74e8685b03494e96c485c36780d13e.jpg)
这是我在这里的第一篇文章,所以我很高兴成为社区的一员.我有一个相当平凡的问题要问,但这是一个相当烦人的问题所以我希望能找到答案.
所以我试图使用Python的FTPLIB模块来检索二进制文件.
直接输入解释器的代码如下所示:
>>> from ftplib import FTP
>>> ftp = FTP('xxx.xx.xx.x') # IP of target device
>>> ftp.login()
>>> file = "foobar.xyz" # target file
>>> ftp.retrbinary("RETR " + file, open('filez.txt', 'wb').write)
虽然某些功能正在运行(我可以查看设备上的所有文件,从FTP服务器应用程序获取欢迎消息,甚至重命名文件),当我尝试执行上面的最后一个命令时,我得到
error_perm Traceback (most recent call last)
/Users/user_name/<ipython console> in <module>()
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.pyc in retrlines(self, cmd, callback)
419 if callback is None: callback = print_line
420 resp = self.sendcmd('TYPE A')
--> 421 conn = self.transfercmd(cmd)
422 fp = conn.makefile('rb')
423 while 1:
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.pyc in transfercmd(self, cmd, rest)
358 def transfercmd(self, cmd, rest=None):
359 """Like ntransfercmd() but returns only the socket."""
--> 360 return self.ntransfercmd(cmd, rest)[0]
361
362 def login(self, user = '', passwd = '', acct = ''):
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.pyc in ntransfercmd(self, cmd, rest)
327 if rest is not None:
328 self.sendcmd("REST %s" % rest)
--> 329 resp = self.sendcmd(cmd)
330 # Some servers apparently send a 200 reply to
331 # a LIST or STOR command, before the 150 reply
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.pyc in sendcmd(self, cmd)
241 '''Send a command and return the response.'''
242 self.putcmd(cmd)
--> 243 return self.getresp()
244
245 def voidcmd(self, cmd):
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/ftplib.pyc in getresp(self)
216 raise error_temp, resp
217 if c == '5':
--> 218 raise error_perm, resp
219 raise error_proto, resp
220
error_perm: 502 Command not implemented.
我查看了ftplib源代码,但是我对这些任务的编程经验非常有限,因为我通常使用Python进行数学运算,之前不必使用FTP.
所以,如果有人能给我一些解决方案的想法,那将是一个巨大的帮助.或者,如果您可以使用不同的语言建议另一个解决方案路径,这将同样有用.
解决方法:
看起来你是匿名登录的(没有在ftp.login()中指定的用户名/密码)因此你得到权限错误.尝试使用登录
ftp.login(user='foo', passwd='bar')
代替.
编辑:这是ftplib使用的简短示例(简单,没有错误处理):
#!/usr/bin/env python
from ftplib import FTP
HOST = "localhost"
UNAME = "foo"
PASSWD = "bar"
DIR = "pub"
FILE = "test.test"
def download_cb(block):
file.write(block)
ftp = FTP(HOST)
ftp.login(user=UNAME, passwd=PASSWD)
ftp.cwd(DIR)
file = open(FILE, "wb")
ftp.retrbinary("RETR " + FILE, download_cb)
file.close()
ftp.close()
注意:如果retrbinary不起作用,您也可以在调用它之前尝试使用ftp.sendcmd(“TYPE I”)显式设置二进制模式.这是非典型情况,但可能有助于一些异国情调的ftp服务器.
内容总结
以上是互联网集市为您收集整理的使用Python的FTP库来检索文件全部内容,希望文章能够帮你解决使用Python的FTP库来检索文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。