关于python语言的ftp客户端 请教高手

aimoran 2007-12-05 06:26:17
做一个ftp的客户端,在ubuntu底下用python语言.已经安装自带的服务器端gproftp。
前提条件是不能用ftp模块,如ftplib,
老师给了许多ftp的命令,如user,pass,pwd,cwd,quit,port,pasv等。
我要做的 ftp客户端比较简单,只需要能下载,上传文件,以及可以改变文件的目录,和消息会话可同步进行即可
看过一些书,几乎所有的书都讲的是用ftplib模块来做客户端。突然不知如何入手。
希望高手给出思路,如果关键的地方能给几个语句更感激不尽。

如果是下载文件
首先我应该做一个连接和ftp服务器的21端口。(已经作了,连接成功)
第二步应该是确认用户和密码,以及匿名登陆的问题,从这里我就不知道该怎么做了。
我本来想用python的commands来执行,但没成功。
第三步是选择一个文件的路径。(希望高手给出提示)
第四步是侦听20端口,以便传送数据,(希望给出提示)
等等

真心的希望高手能作出解答。
...全文
888 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
以后需再关注,现在先帮你顶一下
UltraBejing 2008-04-30
  • 打赏
  • 举报
回复
以后需再关注,现在先帮你顶一下
iambic 2008-04-02
  • 打赏
  • 举报
回复
为什么可以发200分?
Andy_Jing 2008-04-02
  • 打赏
  • 举报
回复
python中自带的ftplib支持加密方式传输文件么?各位清楚有没有支持SSL加密传输的ftplib的包?
Jahson 2008-03-18
  • 打赏
  • 举报
回复
看python 的源代码,自己 sock连接,传送命令,解析返回值;不可能像它那么完备;实现简单功能还是可以的
UBUNTU_710 2008-03-11
  • 打赏
  • 举报
回复
前些天 刚完全用 socket 写了个 FTP Client
antcrazy 2007-12-28
  • 打赏
  • 举报
回复
# -*- coding:utf-8 -*-
# file: pyftp.py
#
import string
from ftplib import FTP # 从ftplib模块中导入FTP
bufsize = 1024 # 设置缓冲区大小
def Get(filename): # 下载文件
command = 'RETR ' + filename
ftp.retrbinary(command, open(filename,'wb').write, bufsize)
print '下载成功'
def Put(filename): # 上传文件
command = 'STOR ' + filename
filehandler = open(filename,'rb')
ftp.storbinary(command,filehandler,bufsize)
filehandler.close()
print '上传成功'
def PWD(): # 获取当前目录
print ftp.pwd()
def Size(filename): # 获取文件大小
print ftp.size(filename)
def Help(): # 输出帮助
print '''
==================================
Simple Python FTP
==================================
cd 进入文件夹
delete 删除文件
dir 获取当前文件列表
get 下载文件
help 帮助
mkdir 创建文件夹
put 上传文件
pwd 获取当前目录
rename 重命名文件
rmdir 删除文件夹
size 获取文件大小
'''
server = raw_input('请输入FTP服务器地址:') # 获取服务器地址
ftp = FTP(server) # 连接到服务器地址
username = raw_input('请输入用户名:') # 获取用户名
password = raw_input('请输入密码:') # 获取字典
ftp.login(username,password) # 登录FTP
print ftp.getwelcome() # 获取欢迎信息
actions = {'dir':ftp.dir, 'pwd': PWD, 'cd':ftp.cwd, 'get':Get, # 命令与对应的函数字典
'put':Put, 'help':Help, 'rmdir': ftp.rmd,
'mkdir': ftp.mkd, 'delete':ftp.delete,
'size':Size, 'rename':ftp.rename}
while True: # 命令循环
print 'pyftp>', # 输出提示符
cmds = raw_input() # 获取输入
cmd = string.split(cmds) # 将输入按空格分割
try: # 异常处理
if len(cmd) == 1: # 判断命令是否有参数
if string.lower(cmd[0]) == 'quit': # 如果命令为quit则退出循环
break
else:
actions[string.lower(cmd[0])]() # 调用与命令对应的函数
elif len(cmd) == 2: # 处理命令有一个参数的情况
actions[string.lower(cmd[0])](cmd[1]) # 调用与命令对应的函数
elif len(cmd) == 3: # 处理命令有两个参数的情况
actions[string.lower(cmd[0])](cmd[1],cmd[2]) # 调用与命令对应的函数
else:
print '输入错误'
except:
print '命令出错'
ftp.quit() # 端口连接
hahe7788 2007-12-26
  • 打赏
  • 举报
回复
49167832,可以去这群,希望和大家一起交流,顺便接分.
hahe7788 2007-12-20
  • 打赏
  • 举报
回复
49167832,可以去这群,希望和大家一起交流,顺便接分.
ChumpKlutz 2007-12-14
  • 打赏
  • 举报
回复
<<深入學習:Python開發>>網上有電子版,我認為很不錯的
iambic 2007-12-14
  • 打赏
  • 举报
回复
Dive into Python
DainelLee 2007-12-14
  • 打赏
  • 举报
回复
借贵贴问个新问题:
就是上面代码在网络条件不好,丢包严重的话 老是在connect的时候被阻塞
而且是一直阻塞,网络不丢包了 还会阻塞在那里
请问有没同志遇到过这个问题,是怎么解决的 给提供点经验
也请高手指点指点 出出解决办法
DainelLee 2007-12-14
  • 打赏
  • 举报
回复
def scan_and_ftp_and_back( files_dir, file_type, host_ip, port, login_user, login_pass, remote_dir, backup_dir ):
global __DEBUG__

files = os.listdir(files_dir)

ftp = FTP()
try:
ftp.connect( host_ip, port )
ftp.login(login_user, login_pass)

#print " Success to connect the reomte ftp host:" + host_ip
except:
print "can't connect the remote ftp host:" + host_ip
print "\t\t port:" + str(port)
print "\t\t user name:" + login_user
print "\t\t password:" + login_pass
return 0
try:
if remote_dir != "" :
ftp.cwd(remote_dir)
except:
print "The remote dir(" + remote_dir + ") doesn't exist!"
return -4

#--------------------> ftp the file to remote host
for file_name in files:
print file_name
if not fnmatch.fnmatch(file_name, file_type):
continue

file_path = files_dir + file_name

try:
fp = open( file_path, "r")
except:
print "can't open the updata file:" + file_path
fp.close()
continue

try:
buf_size = 1024
ftpcmd = "STOR " + file_name + ".temp"
ftp.storbinary(ftpcmd, fp, buf_size)
except:
print "ftp put file faild:" + file_path
fp.close()
continue

fp.close()

try:
ftp.rename(file_name + ".temp", file_name)
except:
print "ftp rename file faild:" + file_name + ".temp"
continue

#--------------------> backup the ftp file
print "backup or delete file-->" + file_path
if backup_dir != "":
cmd = "mv -f " + file_path + " " + DATA_BACKUP_DIR
else:
cmd = "rm -rf " + file_path
commands.getstatusoutput( cmd )

ftp.close()
#end function
phpknows 2007-12-14
  • 打赏
  • 举报
回复
收藏。。谢谢!
有没有学习PYTHON的书?推荐 下?
maplele20 2007-12-07
  • 打赏
  • 举报
回复
看看ftplib.py源代码,可以仿照着写
awperpvip 2007-12-07
  • 打赏
  • 举报
回复
xuexi le
ChumpKlutz 2007-12-07
  • 打赏
  • 举报
回复
> > >   import   ftplib 
> > > ftp=ftplib.FTP('10.136.1.129')
> > > ftp.login('test','test')
'230 User arborims logged in.'
> > > ftp.retrlines('LIST')
total 406498
drwxr-xr-x 15 arborims arborims 1024 Dec 7 11:47 .
drwxr-xr-x 12 root root 512 Oct 30 17:15 ..
-rw-r--r-- 1 arborims arborims 530 Jun 9 2005 .arborims
-rw-r--r-- 1 arborims arborims 9 Apr 18 2005 .arborpw
-rw-r--r-- 1 arborims arborims 1157 Sep 6 20:31 .cshrc
-rw-r--r-- 1 arborims arborims 1185 Nov 15 15:38 .cshrc.DGS
-rw-r--r-- 1 arborims arborims 1201 Dec 1 2006 .cshrc.DR
-rw-r--r-- 1 arborims arborims 1187 Oct 1 16:05 .cshrc.KSC2
-rw-r--r-- 1 arborims arborims 1195 Mar 30 2007 .cshrc.POC
-rw-r--r-- 1 arborims arborims 1193 Sep 27 2006 .cshrc.PS
-rw-r--r-- 1 arborims arborims 1197 Jul 14 2006 .cshrc.R21
-rw-r--r-- 1 arborims arborims 1157 Nov 8 09:34 .cshrc.TEST
-rwxr-xr-x 1 arborims arborims 192 Feb 13 2006 .initprd.sh
-rw-r--r-- 1 arborims arborims 144 Apr 18 2005 .profile
-rw------- 1 arborims arborims 1034 Sep 10 14:37 .sh_history
-rw-r--r-- 1 arborims arborims 8 Apr 18 2005 .THIS_SYSTEM
-rw-r--r-- 1 arborims arborims 2048 May 10 2007 123.dump
drwxr-xr-x 2 arborims arborims 512 Sep 10 13:25 batch
drwxr-xr-x 4 arborims arborims 512 Sep 10 16:08 beerman
drwxr-xr-x 3 arborims arborims 512 Jun 23 2005 bifNcic
lrwxrwxrwx 1 arborims arborims 15 Apr 18 2005 bin -> /mnt/arbor6/bin
drwxr-xr-x 29 arborims arborims 512 Apr 18 2005 data
-rw------- 1 arborims arborims 325 May 15 2007 dead.letter
drwxr-xr-x 2 arborims arborims 512 Nov 15 18:01 dist_file
-rw-r--r-- 1 arborims arborims 140391 May 25 2007 find.dt
drwxr-xr-x 10 arborims arborims 512 Sep 10 16:10 IMS
-rw-r--r-- 1 arborims arborims 207795200 Dec 31 2006 ims.dmp
drwxr-xr-x 7 arborims arborims 512 Aug 25 2005 iris
drwxr-xr-x 5 arborims arborims 512 Jun 13 16:40 julian
-rw-r--r-- 1 arborims arborims 124 Apr 18 2005 local.cshrc
-rw-r--r-- 1 arborims arborims 577 Apr 18 2005 local.login
-rw-r--r-- 1 arborims arborims 562 Apr 18 2005 local.profile
drwxr-xr-x 2 arborims arborims 12288 Nov 15 19:30 log
-rw-r--r-- 1 arborims arborims 308 Oct 11 14:38 mbox
drwxr-xr-x 2 arborims arborims 1024 Nov 8 09:42 scripts
drwxr-xr-x 17 arborims arborims 512 Jun 12 2003 site_specific
drwxr-xr-x 3 arborims arborims 1024 Nov 29 17:33 teng
drwxr-xr-x 2 arborims arborims 512 Dec 7 11:47 test
'226 ASCII Transfer complete.'


ChumpKlutz 2007-12-07
  • 打赏
  • 举报
回复
>>> import ftplib
>>> ftp=ftplib.FTP('10.136.1.129')
>>> ftp.login('test','test
')
'230 User arborims logged in.'
>>> ftp.retrlines('LIST')
total 406498
drwxr-xr-x 15 arborims arborims 1024 Dec 7 11:47 .
drwxr-xr-x 12 root root 512 Oct 30 17:15 ..
-rw-r--r-- 1 arborims arborims 530 Jun 9 2005 .arborims
-rw-r--r-- 1 arborims arborims 9 Apr 18 2005 .arborpw
-rw-r--r-- 1 arborims arborims 1157 Sep 6 20:31 .cshrc
-rw-r--r-- 1 arborims arborims 1185 Nov 15 15:38 .cshrc.DGS
-rw-r--r-- 1 arborims arborims 1201 Dec 1 2006 .cshrc.DR
-rw-r--r-- 1 arborims arborims 1187 Oct 1 16:05 .cshrc.KSC2
-rw-r--r-- 1 arborims arborims 1195 Mar 30 2007 .cshrc.POC
-rw-r--r-- 1 arborims arborims 1193 Sep 27 2006 .cshrc.PS
-rw-r--r-- 1 arborims arborims 1197 Jul 14 2006 .cshrc.R21
-rw-r--r-- 1 arborims arborims 1157 Nov 8 09:34 .cshrc.TEST
-rwxr-xr-x 1 arborims arborims 192 Feb 13 2006 .initprd.sh
-rw-r--r-- 1 arborims arborims 144 Apr 18 2005 .profile
-rw------- 1 arborims arborims 1034 Sep 10 14:37 .sh_history
-rw-r--r-- 1 arborims arborims 8 Apr 18 2005 .THIS_SYSTEM
-rw-r--r-- 1 arborims arborims 2048 May 10 2007 123.dump
drwxr-xr-x 2 arborims arborims 512 Sep 10 13:25 batch
drwxr-xr-x 4 arborims arborims 512 Sep 10 16:08 beerman
drwxr-xr-x 3 arborims arborims 512 Jun 23 2005 bifNcic
lrwxrwxrwx 1 arborims arborims 15 Apr 18 2005 bin -> /mnt/arbor6/bin
drwxr-xr-x 29 arborims arborims 512 Apr 18 2005 data
-rw------- 1 arborims arborims 325 May 15 2007 dead.letter
drwxr-xr-x 2 arborims arborims 512 Nov 15 18:01 dist_file
-rw-r--r-- 1 arborims arborims 140391 May 25 2007 find.dt
drwxr-xr-x 10 arborims arborims 512 Sep 10 16:10 IMS
-rw-r--r-- 1 arborims arborims 207795200 Dec 31 2006 ims.dmp
drwxr-xr-x 7 arborims arborims 512 Aug 25 2005 iris
drwxr-xr-x 5 arborims arborims 512 Jun 13 16:40 julian
-rw-r--r-- 1 arborims arborims 124 Apr 18 2005 local.cshrc
-rw-r--r-- 1 arborims arborims 577 Apr 18 2005 local.login
-rw-r--r-- 1 arborims arborims 562 Apr 18 2005 local.profile
drwxr-xr-x 2 arborims arborims 12288 Nov 15 19:30 log
-rw-r--r-- 1 arborims arborims 308 Oct 11 14:38 mbox
drwxr-xr-x 2 arborims arborims 1024 Nov 8 09:42 scripts
drwxr-xr-x 17 arborims arborims 512 Jun 12 2003 site_specific
drwxr-xr-x 3 arborims arborims 1024 Nov 29 17:33 teng
drwxr-xr-x 2 arborims arborims 512 Dec 7 11:47 test
'226 ASCII Transfer complete.'
iambic 2007-12-05
  • 打赏
  • 举报
回复
一、熟悉socket。
二、了解ftp协议。
需要这两个条件。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧