python FTP问题

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')
报错:[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 没有这个属性方法。

要回复问题请先登录注册