python FTP问题

[code]from ftplib import FTP def ftpconnect(): ftp_server = '' username = '' password = '' ftp = FTP() ftp.set_debuglevel(2) # 打开调试级别2,显示详细信息 ftp.connect(ftp_server, 21) # 连接 ftp.login(username, password) return ftp #ftp连接建立后的上传功能 def ftp_uploadfile(filename): ftp = ftpconnect() remotepath = '/upload/' localpath = '/u01/common/general/exachk/data_audit/output/day/' print ftp.getwelcome() # can display FTP server welcome message. try: bufsize = 1024 fp = open(localpath+filename,'rb') ftp.storbinary('STOR '+remotepath+filename, fp, bufsize) except Exception,e: print str(e)+'\n' return False ftp.set_debuglevel(0) fp.close() return True if __name__ == '__main__': ftp_uploadfile('20161227.txt')[/code]报错:[root@woelcn03 soft]# python test.py  *get* '220 Your welcome info here\r\n' *resp* '220 Your welcome info here' 'NoneType' object has no attribute 'storbinary'   不明白为什么,是环境问题么? 命令行引入ftp 没问题,不会bao报错。 >>> from ftplib import FTP  
已邀请:

空心菜 - 心向阳光,茁壮成长

赞同来自: your well Ansible

@Ansible 说的对,是你代码有问题,ftp这个对象不对。正常代码如下:
# 例:FTP编程  
from ftplib import FTP

ftp = FTP()
timeout = 30
port = 21
ftp.connect('192.168.1.188',port,timeout) # 连接FTP服务器
ftp.login('UserName','888888') # 登录
print ftp.getwelcome() # 获得欢迎信息
ftp.cwd('file/test') # 设置FTP路径
list = ftp.nlst() # 获得目录列表
for name in list:
print(name) # 打印文件名字
path = 'd:/data/' + name # 文件保存路径
f = open(path,'wb') # 打开要保存文件
filename = 'RETR ' + name # 保存FTP文件
ftp.retrbinary(filename,f.write) # 保存FTP上的文件
ftp.delete(name) # 删除FTP文件
ftp.storbinary('STOR '+filename, open(path, 'rb')) # 上传FTP文件
ftp.quit() # 退出FTP服务器
从上面代码你可以看出ftp.retrbinary()  这个方法ftp对象是------> ftp = FTP(),  而不是你代码里面的---->ftp = ftpconnect()
 
完整的参考模板:
#!/usr/bin/python  
# -*- coding: utf-8 -*-
import ftplib
import os
import socket

HOST = 'ftp.mozilla.org'
DIRN = 'pub/mozilla.org/webtools'
FILE = 'bugzilla-3.6.7.tar.gz'
def main():
try:
f = ftplib.FTP(HOST)
except (socket.error, socket.gaierror):
print 'ERROR:cannot reach " %s"' % HOST
return
print '***Connected to host "%s"' % HOST

try:
f.login()
except ftplib.error_perm:
print 'ERROR: cannot login anonymously'
f.quit()
return
print '*** Logged in as "anonymously"'
try:
f.cwd(DIRN)
except ftplib.error_perm:
print 'ERRORL cannot CD to "%s"' % DIRN
f.quit()
return
print '*** Changed to "%s" folder' % DIRN
try:
#传一个回调函数给retrbinary() 它在每接收一个二进制数据时都会被调用
f.retrbinary('RETR %s' % FILE, open(FILE, 'wb').write)
except ftplib.error_perm:
print 'ERROR: cannot read file "%s"' % FILE
os.unlink(FILE)
else:
print '*** Downloaded "%s" to CWD' % FILE
f.quit()
return

if __name__ == '__main__':
main()

Ansible - 项目实施 系统工程师

赞同来自: your well

'NoneType' object has no attribute 'storbinary'
None Type 空类型, 也就是说
ftp.storbinary('STOR '+remotepath+filename, fp, bufsize)
ftp.storbinary 没有这个属性方法。

要回复问题请先登录注册