On Sun, Sep 16, 2012 at 11:09 AM, moonhkt <moon...@gmail.com> wrote: > Hi All > > > O'Reilly Book ISBN 978-986-6840-36-4. > > python --version > Python 2.6.2 on AIX 5.3 > > Using this python to get files in ftp server. > > I got below error. What is the error meaning and how to fix ? > > ftp_mirror.py > Traceback (most recent call last): > File "/xx../shell/ftpmirror.py", line 80, in <module> > f = FTPSync(options.host, options.username, options.password, > options.remote_dir, options.local_dir, opti > ons.delete) > File "xx../shell/ftpmirror.py", line 17, in __init__ > self.conn.cwd(ftp_base_dir) > File "/opt/freeware/lib/python2.6/ftplib.py", line 536, in cwd > cmd = 'CWD ' + dirname > TypeError: cannot concatenate 'str' and 'NoneType' objects > > Source : > > #!/usr/bin/env python > > import ftplib > import os > > class FTPSync(object): > def __init__(self, host, username, password, ftp_base_dir, > local_base_dir, delete=False): > self.host = host > self.username = username > self.password = password > self.ftp_base_dir = ftp_base_dir > self.local_base_dir = local_base_dir > self.delete = delete > > self.conn = ftplib.FTP(host, username, password) > self.conn.cwd(ftp_base_dir) > try: > os.makedirs(local_base_dir) > except OSError: > pass > os.chdir(local_base_dir) > def get_dirs_files(self): > dir_res = [] > self.conn.dir('.', dir_res.append) > files = [f.split(None, 8)[-1] for f in dir_res if > f.startswith('-')] > dirs = [f.split(None, 8)[-1] for f in dir_res if > f.startswith('d')] > return (files, dirs) > def walk(self, next_dir): > print "Walking to", next_dir > self.conn.cwd(next_dir) > try: > os.mkdir(next_dir) > except OSError: > pass > os.chdir(next_dir) > > ftp_curr_dir = self.conn.pwd() > local_curr_dir = os.getcwd() > > files, dirs = self.get_dirs_files() > print "FILES:", files > print "DIRS:", dirs > for f in files: > print next_dir, ':', f > outf = open(f, 'wb') > try: > self.conn.retrbinary('RETR %s' % f, outf.write) > finally: > outf.close() > if self.delete: > print "Deleting", f > self.conn.delete(f) > for d in dirs: > os.chdir(local_curr_dir) > self.conn.cwd(ftp_curr_dir) > self.walk(d) > > def run(self): > self.walk('.') > > > if __name__ == '__main__': > from optparse import OptionParser > parser = OptionParser() > parser.add_option("-o", "--host", dest="host", > action='store', help="FTP host") > parser.add_option("-u", "--username", dest="username", > action='store', help="FTP username") > parser.add_option("-p", "--password", dest="password", > action='store', help="FTP password") > parser.add_option("-r", "--remote_dir", dest="remote_dir", > action='store', help="FTP remote starting directory") > parser.add_option("-l", "--local_dir", dest="local_dir", > action='store', help="Local starting directory") > parser.add_option("-d", "--delete", dest="delete", default=False, > action='store_true', help="use regex parser") > > (options, args) = parser.parse_args() comment the next line , then print the parameters and see what they are. That should get you started. > #f = FTPSync(options.host, options.username, options.password, > # options.remote_dir, options.local_dir, options.delete) f = print(options.host, options.username, options.password, options.remote_dir, options.local_dir, options.delete)
> f.run() > > -- > http://mail.python.org/mailman/listinfo/python-list -- Joel Goldstick -- http://mail.python.org/mailman/listinfo/python-list