diff -ur v5/ftp_ut.py v6/ftp_ut.py --- v5/ftp_ut.py 2020-02-12 00:06:13.000000000 +0900 +++ v6/ftp_ut.py 2020-02-14 00:11:24.000000000 +0900 @@ -17,62 +17,55 @@ write = lambda s: proc.write( s + '\n' ) - def comm(s): + def write(s): if debug: dbg.out(s) s += '\n' - r = proc.comm(s) - if r and debug: - dbg.out(r, '') - return (s, r) + proc.write(s) + return s - comm_lst = lambda lst: comm( to_str(lst) ) + def read(): + return proc.read() def login(): lst = [ 'open {}'.format( host ), 'user {} {}'.format( user, passwd ), 'bin', - 'prompt', - 'verbose', + 'prompt off', ] - return comm_lst(lst) + write( to_str(lst) ) + return read() def quit(): write('quit') proc.wait() - do_cmd = lambda cmd, prm='': comm( to_str( (cmd, prm), delim=' ' ) ) + do_cmd = lambda cmd, prm='': write( to_str( (cmd, prm), delim=' ' ) ) - ls = lambda path='': do_cmd( 'ls', path ) - - def flat_sr(srs): - (s, r) = map( lambda lst: to_str(lst, delim=''), zip( *srs ) ) - return (s, r) - - def add_sr(sr, sr_): - f = lambda i: sr[i] + ( sr_[i] if sr_[i] else '' ) - return ( f(0), f(1) ) + def ls(path=''): + do_cmd( 'ls', path ) + r = read() + return r if r else '' def cd(path, lcd=True, back=False): - if not path: - return ('', '') - srs = [] - if back: - n = path.count('/') + 1 if path else 0 - path = to_str( ['..'] * n, delim='/' ) - srs.append( do_cmd( 'cd', path ) ) - if lcd: - srs.append( do_cmd( 'lcd', path ) ) - return flat_sr(srs) + r = '' + if path: + if back: + n = path.count('/') + 1 if path else 0 + path = to_str( ['..'] * n, delim='/' ) + r += do_cmd( 'cd', path ) + if lcd: + r += do_cmd( 'lcd', path ) + return r def do_cd_cmd(cmd, path, lcd=True): - (dir_, name) = os.path.split(path) - srs = [] - srs.append( cd( dir_, lcd) ) - srs.append( do_cmd( cmd, name ) ) - srs.append( cd( dir_, lcd, back=True ) ) - return flat_sr(srs) + (dir_, name) = os.path.split( path ) + r = '' + r += cd( dir_, lcd ) + r += do_cmd( cmd, name ) + r += cd( dir_, lcd, back=True ) + return r def put(path): return do_cd_cmd( 'put', path ) @@ -81,37 +74,40 @@ return do_cd_cmd( 'del', path, lcd=False ) def mkdir(path): - srs = [] + r = '' nms = path.split('/') for i in range( len(nms) ): path_ = to_str( nms[:i+1], delim='/' ) - srs.append( do_cmd( 'mkdir', path_ ) ) - return flat_sr(srs) + r += do_cmd( 'mkdir', path_ ) + return r def rmdir(path): return do_cmd( 'rmdir', path ) - def lst_d_f(path): - (s, r) = ls(path) - lst = r.split('\n') + def lstf(path=''): + r = ls(path) if path else ls() + lst = r.strip().split('\n') lst = map( lambda s: s.split(), lst ) is_mod = lambda s: all( map( lambda c: c in 'cdrwx-', s ) ) is_stat = lambda ws: len(ws) == 9 and is_mod( ws[0] ) lst = list( filter( is_stat, lst ) ) - (lst_d, lst_f) = base.filter_div( lambda ws: ws[0][0] == 'd', lst ) - - to_nms = lambda lst: list( map( lambda ws: ws[-1], lst ) ) - (nms_d, nms_f) = map( to_nms, (lst_d, lst_f) ) - nms_d = list( filter( lambda s: s not in ('.', '..'), nms_d ) ) - return (nms_d, nms_f) + rlst = [] + for ws in lst: + nm = ws[-1] + if nm in ('.', '..'): + continue + if ws[0][0] == 'd': + nm += '/' + rlst.append( nm ) + return to_str( rlst, last=True ) def do_paths(f, paths): - srs = [] + r = '' for path in paths: - srs.append( f(path) ) - return flat_sr(srs) + r += f( path ) + return r return empty.new( locals() ) @@ -153,8 +149,8 @@ def help(): msgs = [ - '[-h] [-dbg] [-s site_name] [-C dir]', - ' host user passwd path ..', + '[-h] [-debug] [-s site_name] [-C dir]', + ' host user passwd [put] path ..', ' host user passwd del path ..', ' host user passwd mkdir path ..', ' host user passwd rmdir path ..', @@ -195,36 +191,30 @@ ftp = new(host, user, passwd, debug=debug) ( p0, p1_ ) = ( paths[0], paths[1:] ) - quiet = p0 in ('ls', 'lst') + quiet = p0 in ( 'ls', 'lst' ) ftp.login() if not quiet: dbg.out('login') if cd: - (s, r) = ftp.cd( cd, lcd=False ) + r = ftp.cd( cd, lcd=False ) if not quiet: - dbg.out( s, '' ) + dbg.out( r, '' ) - sr = ('', '') + r = '' if p0 == 'del': - sr = ftp.do_paths( ftp.del_, p1_ ) + r = ftp.do_paths( ftp.del_, p1_ ) elif p0 == 'mkdir': - sr = ftp.do_paths( ftp.mkdir, p1_ ) + r = ftp.do_paths( ftp.mkdir, p1_ ) elif p0 == 'rmdir': - sr = ftp.do_paths( ftp.rmdir, p1_ ) + r = ftp.do_paths( ftp.rmdir, p1_ ) elif p0 == 'ls': - sr = ftp.do_paths( ftp.ls, p1_ ) if p1_ else ftp.ls() - elif p0 == 'lst': # special - lst = [] - for path in p1_: - ( nms_d, nms_f ) = ftp.lst_d_f(path) - lst += nms_d + nms_f - sr = ( '', to_str(lst, last=True) ) + r = ftp.do_paths( ftp.ls, p1_ ) if p1_ else ftp.ls() + elif p0 == 'lst': + r = ftp.do_paths( ftp.lstf, p1_ ) if p1_ else ftp.lstf() else: - sr = ftp.do_paths( ftp.put, paths ) - - (s, r) = sr - dbg.out( r if quiet else s, '' ) + r = ftp.do_paths( ftp.put, p1_ if p0 == 'put' else paths ) + dbg.out( r, '') ftp.quit() # EOF