#!/usr/bin/env python import os import cmd_ut import dbg import arg to_str = lambda lst: '\n'.join( lst ) def login_str(host, user, passwd): lst = [ 'open {}'.format( host ), 'user {} {}'.format( user, passwd ), 'bin', 'prompt', ] return to_str( lst ) def get_str(cmd, paths, lcd=True): def f(path): (dir_, name) = os.path.split(path) n = dir_.count('/') + 1 if dir_ else 0 back = '/'.join( ['..'] * n ) lst = [] if n > 0: lst.append( 'cd {}'.format(dir_) ) if lcd: lst.append( 'lcd {}'.format(dir_) ) lst.append( '{} {}'.format(cmd, name) ) if n > 0: lst.append( 'cd {}'.format(back) ) if lcd: lst.append( 'lcd {}'.format(back) ) return to_str( lst ) return to_str( map( f, paths ) ) def mkdir_str(paths): def f(path): lst = [] nms = path.split('/') for i in range( len(nms) ): lst.append( 'mkdir {}'.format( '/'.join( nms[:i+1] ) ) ) return to_str( lst ) return to_str( map( f, paths ) ) def rmdir_str(paths): f = lambda path: 'rmdir {}'.format(path) return to_str( map( f, paths ) ) def help(): msgs = [ '-h', ' host user passwd path ..', ' host user passwd del path ..', ' host user passwd mkdir path ..', ' host user passwd rmdir path ..', ] dbg.help_exit( to_str( msgs ) ) if __name__ == "__main__": a = arg.new() host = a.pop() if not host or a.is_pop('-h'): help() user = a.pop() passwd = a.pop() paths = a.get_av() if not paths: help() lst = [] lst.append( login_str( host, user, passwd ) ) 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:] ) ) 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() ) # EOF