分享

Python编程入门:编写简单的FTP工具

本帖最后由 xioaxu790 于 2014-5-31 08:42 编辑
问题导读:
1、如何用Python编写一个简单的命令行FTP工具?
2、什么是 ftplib模块?





前言:
Python之意为“巨蟒”,相反,它却并不臃肿,其语法婀娜多姿而灵妙。
与其他语法相比,其代码量和特性十分优异。

可执行的Python程序
这部分内容只对Linux/Unix用户适用,不过Windows用户可能也对程序的第一行比较好奇。首先我们需要通过chmod命令,给程序可执行的许可,然后 运行程序。
  1. $ chmod a+x helloworld.py
  2. $ ./helloworld.py
  3. Hello World
复制代码


chmod命令用来 改变 文件的 模式 ,给系统中所有用户这个源文件的执行许可。然后我们可以直接通过指定源文件的位置来执行程序。我们使用./来指示程序位于当前目录。

为了更加有趣一些,你可以把你的文件名改成仅仅helloworld,然后运行./helloworld。这样,这个程序仍然可以工作,因为系统知道它必须用源文件第一行指定的那个解释器来运行程序。

只要知道程序的确切位置,你现在就可以运行程序了——但是如果你希望你的程序能够从各个位置运行呢?那样的话,你可以把你的程序保存在PATH环境变量中的目录之一。每当你运行任何程序,系统会查找列在PATH环境变量中的各个目录。然后运行那个程序。你只要简单地把这个源文件复制到PATH所列目录之一就可以使你的程序在任何位置都可用了。
  1. $ echo $PATH
  2. /opt/mono/bin/:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/swaroop/bin
  3. $ cp helloworld.py /home/swaroop/bin/helloworld
  4. $ helloworld
  5. Hello World
复制代码


我们能够用echo命令来显示PATH变量,用$给变量名加前缀以向shell表示我们需要这个变量的值。我们看到/home/swaroop/bin是PATH变量中的目录之一。swaroop是我的系统中使用的用户名。通常,在你的系统中也会有一个相似的目录。你也可以把你选择的目录添加到PATH变量中去——这可以通过运行PATH=$PATH:/home/swaroop/mydir完成,其中“/home/swaroop/mydir”是我想要添加到PATH变量中的目录。

当你想要在任何时间、任何地方运行你的程序的时候,这个方法十分有用。它就好像创造你自己的指令,如同cd或其他Linux终端或DOS提示符命令那样。

提示
对于Python来说,程序、脚本或者软件都是指同一个东西。


ftplib模块:
ftplib模块定义了FTP类和一些方法,用以进行客户端的ftp编程。我们可用python编写一个自已的ftp客户端程序,用于下载文件或镜像站点。如果想了解ftp协议的详细内容,请参考RFC959。

    该模块是python的通用模块,所以默认应该已安装。ftplib模块使用很简单,暂时只有一个FTP类和十几个函数。下面用一个交互方式演示一下ftplib的主要功能。


一个简单的命令行FTP工具,源代码如下:

  1. # -*- coding:utf-8 -*-
  2. #filename:ftp.py
  3. import string
  4. from ftplib import FTP
  5. bufsize = 1024
  6. def Get(filename):
  7. command = ' RETR ' + filename
  8. ftp.retrbinary(command,open(filename,'wb').write,bufsize)
  9. print '下载成功'
  10. def Put(filename):
  11. command = ' STOR ' + filename
  12. filehandler = open(filename,'rb')
  13. ftp.storbinary(command,filehandler,bufsize)
  14. filehandler.close()
  15. print '上传成功'
  16. def PWD():
  17. print ftp.pwd()
  18. def Size(filename):
  19. print ftp.size(filename)
  20. def Help():
  21. print '''
  22. ===============================
  23. Simple Python FTP
  24. ===============================
  25. cd 进入文件夹
  26. delete 删除文件
  27. dir 获取当前文件列表
  28. get 下载文件
  29. help 获取帮助
  30. mkdir 创建文件夹
  31. put 上传文件
  32. pwd 获取当前目录
  33. rename 重命名文件
  34. rmdir 删除文件夹
  35. size 获取文件夹
  36. '''
  37. server = raw_input('Please Enter FTP Server Address:')
  38. ftp = FTP(server)
  39. username = raw_input('Please Enter Username:')
  40. password = raw_input('Please Enter Password:')
  41. ftp.login(username,password)
  42. print ftp.getwelcome()
  43. actions = {'dir':ftp.dir,'pwd':PWD,'cd':ftp.cwd,'get':Get,
  44. 'put':Put,'help':Help,'rmdir':ftp.rmd,
  45. 'mkdir':ftp.mkd,'delete':ftp.delete,
  46. 'size':Size,'rename':ftp.rename}
  47. while True:
  48. print 'pyftp>',
  49. cmds = raw_input()
  50. cmd = string.split(cmds)
  51. try:
  52. if len(cmd) == 1:
  53. if string.lower(cmd[0]) == 'quit':
  54. break
  55. else:
  56. actions[string.lower(cmd[0])]()
  57. elif len(cmd) == 2:
  58. actions[string.lower(cmd[0])](cmd[1])
  59. elif len(cmd) == 3:
  60. actions[string.lower(cmd[0])](cmd[1],cmd[2])
  61. else:
  62. print 'Enter Error!'
  63. except:
  64. print 'Command Error!'
  65. ftp.quit()
复制代码

结果如下所示:
psb.png




已有(1)人评论

跳转到指定楼层
好梦一场睡 发表于 2014-9-26 21:59:15
很不错!!学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条