昨天发了一个ftp客户端的程序,现在用cmd模块改了下

zlchina1989 2010-12-10 12:53:47
昨天的帖子地址:http://topic.csdn.net/u/20101209/15/8ab43f3a-010a-4380-8774-872790f55c3e.html?75379


# -*- coding: utf-8 -*-
#!/usr/bin/python
# Filename: ftp_cmd.py

from ftplib import FTP
import sys
import os
import cmd

class myftp(cmd.Cmd):
def connect_ftp(self):
try:
print '正在准备连接到ftp服务器......'
print self.host
self.ftp_obj = FTP(self.host)
print '连接到ftp服务器成功......'
print f_obj.getwelcome()
except:
print '无法连接到ftp服务器......'

def login_ftp(self):
try:
print '正在准备登录到ftp服务器......'
self.ftp_obj.login(self.user, self.password)
print '成功登录到ftp服务器......'
except:
print '无法登录到ftp服务器......'
print '退出系统......'
sys.exit(1)

def upload(self, file_path):
directory = os.path.split(file_path)[0]
filename = os.path.split(file_path)[1]
ext = os.path.splitext(filename)[1]
list_dir = directory.split('/')
default_dir = os.getcwd()
try:
if len(list_dir[0]) != 0:
print 'a'
for it_dir in list_dir:
print it_dir
os.chdir(it_dir)
except:
print 'Error:没有此目录'
return
try:
if ext in self.file_type:
self.ftp_obj.storlines('STOR ' + filename,
open(filename))
else:
self.ftp_obj.storbinary('STOR ' + filename,
open(filename, 'rb'),
1024)
#os.chdir(default_dir)
print '文件上传成功......'
except:
print 'Error:文件上传出错,或者是文件路径出错!'

def download(self, file_path):
directory = os.path.split(file_path)[0]
filename = os.path.split(file_path)[1]
ext = os.path.splitext(file_path)[1]
default_directory = self.ftp_obj.pwd()
try:
if directory is not None:
self.ftp_obj.cwd(directory)
except:
print 'Error:ftp服务器中没有此目录路径'
return

if len(filename) == 0:
print 'Error:请输入正确的文件路径'
return

try:
if ext in self.file_type:
outfile = open(filename, 'w')
self.ftp_obj.retrlines('RETR ' + filename, lambda s,
w = outfile.write : w(s + '\n'))
else:
outfile = open(filename, 'wr')
self.ftp_obj.retrbinary('RETR ' + filename, lambda s,
w = outfile.write : w(s))
print '文件下载成功......'
except:
print 'Error:文件下载失败,可能服务器上不存在此文件或者网络错误!'

def __init__(self):
'''init data.

No args.
'''
cmd.Cmd.__init__(self)
self.prompt = 'myftp>>'
self.host = '204.45.67.107'
self.user = '19930'
self.password = '111111'
self.file_type = ('.txt', '.htm', '.html', '.asp',
'.css', '.xml', '.py')
self.intro = '''
欢迎进入本ftp客户端应用程序系统!
系统命令如下:
print/p : 显示系统命令介绍界面
dir/b : 显示当前文件夹文件列表(含有详细列表信息)
nlst/c : 显示当前文件夹文件
upload/d : 上传文件
download/e: 下载文件
pwd/f : 显示当前目录
cwd/g : 跳转进入某目录
mkd/h : 创建一个新的目录
rmd/i : 删除一个目录
size/j : 返回一个文件的文件大小
delete/d : 删除某个文件
quit/q : 退出FTP
'''
self.connect_ftp()
self.login_ftp()

def print_intro(self):
print self.intro
print '请选择你需要的操作>>'

def help_quit(self):
print '功能:关闭ftp连接,并且退出当前应用程序.'

def do_quit(self, line):
print '结束ftp连接,程序退出......'
self.ftp_obj.quit()
self.ftp_obj.close()
sys.exit(0)

def help_dir(self):
print '功能:显示当前目录下,某文件夹文件列表(含有详细列表信息)'

def do_dir(self, line):
try:
print '当前目录下,某文件夹下的文件列表信息为:'
input_path = raw_input('请输入要查看文件信息的目录>>')
self.ftp_obj.dir(input_path)
print '结束......'
except:
print '输入的目录信息出错......'

def help_nlst(self):
print '功能:当前目录下,显示某目录下的文件信息'

def do_nlst(self, line):
try:
print '某文件夹下的文件列表信息:'
input_path = raw_input('请输入要查看文件信息的目录>>')
cur_list = self.ftp_obj.nlst(input_path)
' '.join(cur_list)
print cur_list
print '结束......'
except:
print '输入文件目录路径出错......'

def help_upload(self):
print '功能:上传文件到ftp空间'

def do_upload(self, line):
print '当前进入上传模式:'
file_path = raw_input('请输入一个文件路径或者文件名>>')
self.upload(file_path)

def help_pwd(self):
print '功能:显示当前所在的ftp路径'

def do_pwd(self, line):
print '当前路径为:'
print self.ftp_obj.pwd()
print '结束......'

def help_download(self):
print '功能:从ftp服务器上下载文件'

def do_download(self, line):
print '当前所在为下载模块:'
filename_path = raw_input('请输入一个文件名或者文件路径>>')
self.download(filename_path)

def help_cwd(self):
print '功能:跳转进入某一目录'

def do_cwd(self, line):
try:
path = raw_input('请输入你要查看的目录路径>>')
print self.ftp_obj.cwd(path)
print '结束......'
except:
print 'Error:目录输入有误'

def help_mkd(self):
print '功能:在当前目录下创建一个文件夹'

def do_mkd(self, line):
try:
directory = raw_input('请输入一个文件夹名>>')
self.ftp_obj.mkd(directory)
print '文件夹生成成功!'
except:
print 'Error:已经存在此目录和其他网络原因'

def help_rmd(self):
print '功能:删除当前路径文件夹'

def do_rmd(self, line):
try:
directory = raw_input('请输入你想要删除的文件夹名称>>')
self.ftp_obj.rmd(directory)
print '文件夹删除成功......'
except:
print 'Error:不存在此文件夹,或其他网络原因......'

def help_size(self):
print '功能:显示某个文件的大小'

def do_size(self, line):
try:
filename = raw_input('请输入文件名>>')
print '%s B' % self.ftp_obj.size(filename)
print '结束......'
except:
print 'Error:不存在此文件或者输入出错.'
def help_delete(self):
print '功能:删除当前目录下某文件'

def do_delete(self, line):
try:
filename = raw_input('请输入文件名>>')
self.ftp_obj.delete(filename)
print '删除文件成功!'
except:
print 'Error:删除文件失败'

def help_print(self):
print '功能:打印出命令介绍信息'

def do_print(self, line):
print self.intro

# short command
do_p = do_print
do_b = do_dir
do_c = do_nlst
do_d = do_upload
do_e = do_download
do_f = do_pwd
do_g = do_cwd
do_h = do_mkd
do_i = do_rmd
do_j = do_size
do_k = do_delete
do_q = do_quit

def main():
m_ftp = myftp()
m_ftp.cmdloop()

if __name__ == '__main__':
main()
...全文
125 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlchina1989 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 iambic 的回复:]

一、还是重复代码太多
二、功能代码参杂了太多的print。
三、尽量使用异常。
[/Quote]
如果用你上次说的map会不会好些呢
iambic 2010-12-10
  • 打赏
  • 举报
回复
一、还是重复代码太多
二、功能代码参杂了太多的print。
三、尽量使用异常。

37,720

社区成员

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

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