之前写过一篇FTP服务端的文章,这篇介绍一下客户端吧。在使用虚拟机的时候,由于虚拟机工具没安装成功,所以我决定用FTP在主机与虚拟机之间传送文件,在虚拟机上开启FTP服务,然后把客户端放在主机上,当然也可以颠倒过来。
服务端请参考:python实现FTP服务器
客户端的实现也不算复杂,本文只是简单的实现了文件的上传和下载功能
import ftplib
import sys
#获取服务器的ip地址(如192.168.1.107),使用sys.argv可以从命令行参数里面获取
if len(sys.argv) < 2:
tmp = input("please input server address:")
sys.argv.append(tmp)
server_address = sys.argv[1]
#创建FTP实例,并显示欢迎界面
ftp = ftplib.FTP(server_address)
print(ftp.getwelcome())
#登录,输入服务器里添加过的用户名和口令
ftp.login('user', 'pass')
#文件上传
def upload(fname):
fd = open(fname, 'rb')
new_name = input("input new name:")
#以二进制的形式上传
ftp.storbinary("STOR %s" % new_name, fd)
fd.close()
print("upload finished")
#文件下载
def download(fname):
#构建文件的存储路径,这里用的是D盘,可以自行设置
new_path = "D:\\FTPdownload\\" + fname
fd = open(new_path, 'wb')
#以二进制形式下载,注意第二个参数是fd.write,上传时是fd
ftp.retrbinary("RETR %s" % fname, fd.write)
fd.close()
print("download finished")
def main():
#选择操作,上传、下载、退出
op = input("what do you want?(u/d/q)")
if op == "u":
#输入文件完整路径,必要时可以用绝对路径
fname = input("input the file of path:")
upload(fname)
elif op == "d":
fname = input("input the file name:")
download(fname)
else:
print("quit now!")
ftp.quit()
if __name__ == '__main__':
main()
附带一些ftplib库的相关操作:
ftp.cwd(pathname) # 设置FTP当前操作的路径
ftp.dir() # 显示目录下所有目录的信息
ftp.nlst() # 获取目录下的文件
ftp.mkd(pathname) # 新建远程目录
ftp.rmd(dirname) # 删除远程目录
ftp.pwd() # 返回当前所在位置
ftp.delete(filename) # 删除远程文件
ftp.rename(old_name, new_name) #将fromname改为toname
ftp.storbinary('STOR filename.txt',file_handel,[bufsize]) # 上传目标文件,最后一个参数可以不填
ftp。retrbinary('RETR filename.txt',file_handel,[bufsize]) # 下载FTP文件