百度空间上的背景音乐时不时会更新下,每次都是通过FlashFXP上传的。又是登录,又是选择目录的,着实麻烦。于是写了这个小工具。
  开发环境:Eclipse3.2+Pydev+Python2.4
  技术上,没有太多的新意,几乎就是ftplib的基础应用。在开发方式上,通过写“死”的测试Demo,抽取出“活”的部分。整个迭代过程,比较自然。思路会随着写的过程,逐渐清晰。一些在设计之初没考虑到的细节部分,也会中途逐渐显现。
  主要功能有三个。list,显示ftp站点某目录的内容;download,下载文件到指定目录下;upload,上传文件到指定目录下。
  还是看代码,比较简单。一定程度上,考虑到了程序的可扩展性。
conf/config.xml:

1 <? xml version="1.0" encoding="UTF-8" ?>
2 < configuration >
3 < host > 10.0.0.1 </ host >
4 < user > username </ user >
5 < password > password </ password >
6 </ configuration >

modules/parseConf.py:

 1 #    Programmer:     qixiang
 2 #    E-mail:         mail2qixiang AT gmail DOT com
 3 #
 4 #    Copyleft 2006 qixiang

 5 #
 6 #    modules/parseConf.py 2006-11-19 03:56:15 qixiang

 7
 8 def  getNodeValue(filename, nodename):
 9      from  xml.dom  import
 minidom
10     xmldoc  =
 minidom.parse(filename)
11     nodeValue  =
 xmldoc.getElementsByTagName(nodename)[0].firstChild.data
12      return  nodeValue

modules/handleFTP.py:

 1 #    Programmer:     qixiang
 2 #    E-mail:         mail2qixiang AT gmail DOT com
 3 #
 4 #    Copyleft 2006 qixiang

 5 #
 6 #    modules/handleFTP.py 2006-11-19 04:04:25 qixiang

 7
 8 from  ftplib  import  FTP
 9 def
 login(host, user, password):
10      try
:
11         ftp  =
 FTP(host)
12          # print 'connect successfully'

13          try :
14             ftp.login(user = user, passwd =
password)
15              # print 'login successfully'

16              return  ftp
17          except
:
18              print   ' incorrect user or password '

19      except :
20          print   ' unconnected host '

21
22 def
 list(ftp, ftpDirectory):
23      try
:
24
        ftp.cwd(ftpDirectory)
25         ftp.retrlines( ' LIST '
)
26
        ftp.close()
27      except
:
28          print   ' incorrect directory '

29         
30 def
 upload(ftp, remoteFile, localFile):
31      try
:
32         ftp.storlines( ' STOR  ' +
remoteFile, open(localFile))
33          print   ' upload successfully '

34          print
35         ftp.retrlines( ' LIST ' )
36
        ftp.close()
37      except
:
38          print   ' incorrect remoteFile or localFile '

39
40 def
 download(ftp, remoteFile, localFile):
41      try
:
42         ftp.retrlines( ' RETR  ' + remoteFile, open(localFile,  " w "
).write)   
43          print   ' download successfully '
 
44          print

45         ftp.retrlines( ' LIST ' )
46
        ftp.close()
47      except
:
48          print   ' incorrect remoteFile or localFile '

ftp.py :

 1 #    Programmer:     qixiang
 2 #    E-mail:         mail2qixiang AT gmail DOT com
 3 #
 4 #    Copyleft 2006 qixiang

 5 #
 6 #    ftp.py 2006-11-19 04:04:54 qixiang

 7
 8 import  sys
 9 from  modules.parseConf  import
 getNodeValue
10 from  modules.handleFTP  import
 login, list, upload, download
11

12 configFile  =   ' conf/config.xml '

13 flag  =  sys.argv[ 1 ]
14 ftp  =  login(getNodeValue(configFile,  ' host ' ), getNodeValue(configFile,  ' user ' ), getNodeValue(configFile,  ' password '
))
15

16 if  flag  ==   ' list '
:
17     list(ftp, sys.argv[ 2
])
18 if  flag  ==   ' upload '
:
19     upload(ftp, sys.argv[ 2 ], sys.argv[ 3
])
20 if  flag  ==   ' download '
:
21     download(ftp, sys.argv[ 2 ], sys.argv[ 3 ])

  命令行下运行:
  1. list
  python ftp.py list ftp目录名
  eg. python ftp.py list music

  2. upload
  python ftp.py upload 上传所要保存的ftp目录文件名 待上传的本地文件
  eg. python ftp.py upload music\remote.xml c:\local.xml

  3. download
  python ftp.py download 待下载的远程文件 下载所要保存的本地目录文件名
  eg. python ftp.py download music\remote.xml c:\local.xml

  我个人是将实现upload功能的命令,保存成一个批处理文件。需要的时候,运行下就OK了。
upload.bat:

d:
cd java/eclipse/workspace/ftp
python ftp.py upload music\mp3player.xml f:\website\music\mp3player.xml

  功能比较单一,还有许多欠考虑的地方。例如对上传文件类型的判断,对上传、下载文件所在目录存在与否的判断,等等。
  小的东西,如果深究,也蛮有意思。

  ps: 程序目录及copyleft部分借鉴了limodouUlipad,在此表感谢。  
 



欢迎大家访问我的个人网站 萌萌的IT人