#!/usr/bin/env python import sys import time import fio_ut import dbg def wild_eq( s, t ): if '*' not in t: return s == t lst = t.split( '*' ) t = lst.pop( 0 ) if t: if not s.startswith( t ): return False s = s[ len( t ) : ] t = lst.pop( -1 ) if t: if not s.endswith( t ): return False s = s[ : -len( t ) ] for t in lst: if not t: continue if t not in s: return False i = s.index( t ) + len( t ) s = s[ i : ] return True def run(): s = sys.stdin.read() s = s.replace( '\r', '' ) lst = s.split( 'CMD>>>' ) def func( s ): n = 0 if s.startswith( '^D' ): n = 2 elif '\n' in s: n = s.index( '\n' ) + 1 return ( s[ : n ], s[ n : ] ) lst = list( map( func, lst ) ) cmd = 'python -m pty_spawn bash' proc = fio_ut.proc_new( cmd ) res = True for ( si, so ) in lst: if si: dbg.out( si, '' ) s = '\x04' if si == '^D' else si if not fio_ut.p_s( proc.fo, s ): dbg.out( 'err p_s' ) exp = si + so #dbg.out( 'exp="{}"'.format( exp ) ) time.sleep( 1.0 ) r = fio_ut.g_s_all( proc.fi ) if not r: dbg.out( 'err g_s_all' ) r = r.replace( '\r', '' ) #dbg.out( 'r="{}"'.format( r ) ) res = wild_eq( r, exp ) if not res: dbg.out( 'NG cmd "{}" get "{}", exp is "{}"'.format( si, r, exp ) ) #dbg.out( '{}'.format( list( map( lambda c: '{:x}'.format( ord( c ) ), r ) ) ) ) break if res: dbg.out( 'OK' ) proc.stop() if __name__ == "__main__": run() # EOF