diff -ur v1/ftp_ut.py v2/ftp_ut.py --- v1/ftp_ut.py 2020-02-08 20:58:26.000000000 +0900 +++ v2/ftp_ut.py 2020-02-09 11:01:19.000000000 +0900 @@ -5,8 +5,9 @@ import cmd_ut import dbg import arg +import base -to_str = lambda lst: '\n'.join( lst ) +to_str = base.to_str def login_str(host, user, passwd): lst = [ @@ -56,13 +57,33 @@ f = lambda path: 'rmdir {}'.format(path) return to_str( map( f, paths ) ) +def ls_str(paths): + f = lambda path: 'ls {}'.format(path) + return to_str( map( f, paths ) ) + +def cmd_str_for_show(s): # passwd ! + def f(line): + ws = line.split(' ') + if ws[0] == 'user': + ws[2] = '----' + return to_str( ws, delim=' ' ) + + return to_str( map( f, s.split('\n') ) ) + +def ls_to_lst(lst): + f = lambda s: s.split()[-1] if s else '' + flt = lambda s: s and s not in ('.', '..') + return filter( flt, map( f, lst ) ) + def help(): msgs = [ - '-h', + '-h -v', ' host user passwd path ..', ' host user passwd del path ..', ' host user passwd mkdir path ..', ' host user passwd rmdir path ..', + ' host user passwd ls path ..', + ' host user passwd lst path ..', ] dbg.help_exit( to_str( msgs ) ) @@ -78,24 +99,41 @@ help() lst = [] - lst.append( login_str( host, user, passwd ) ) + s = login_str( host, user, passwd ) + lst.append(s) - if paths[0] == 'del': - lst.append( get_str( paths[0], paths[1:], False ) ) - elif paths[0] == 'mkdir': - lst.append( mkdir_str( paths[1:] ) ) - elif paths[0] == 'rmdir': - lst.append( rmdir_str( paths[1:] ) ) + s = '' + ( p0, p1_ ) = ( paths[0], paths[1:] ) + if p0 == 'del': + s = get_str( p0, p1_, False ) + elif p0 == 'mkdir': + s = mkdir_str( p1_ ) + elif p0 == 'rmdir': + s = rmdir_str( p1_ ) + elif p0 == 'ls': + s = ls_str( p1_ ) + elif p0 == 'lst': # special + s = ls_str( p1_ ) else: - lst.append( get_str( 'put', paths ) ) - - lst.append( 'quit' ) - - s = to_str( lst ) + '\n' - - lst = s.split('\n') - lst[1] = ' '.join( lst[1].split(' ')[:-1] + ['----'] ) - dbg.out( to_str(lst) ) - - cmd_ut.call_comm( 'ftp -n', s.encode() ) + s = get_str( 'put', paths ) + if s: + lst.append(s) + + lst.append('quit') + + s = to_str( lst ) + + res_show = [ 'ls', 'lst' ] + + if p0 not in res_show: + dbg.out( cmd_str_for_show(s) ) + + cmd = 'ftp -n' + r = cmd_ut.call_comm( cmd, s.encode() ).decode() + if p0 in res_show: + lst = r.strip().split('\n') + lst = lst[1:] # cut 'Interactive mode off.' + if p0 == 'lst': + lst = sorted( ls_to_lst(lst) ) + dbg.out( to_str(lst) ) # EOF