百度空間上的背景音樂時不時會更新下,每次都是通過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部分借鑒了limodou的Ulipad,在此表感謝。