diff -ur v10/sock_ut.py v11/sock_ut.py --- v10/sock_ut.py 2021-07-19 00:10:50.000000000 +0900 +++ v11/sock_ut.py 2021-07-25 11:38:44.000000000 +0900 @@ -280,13 +280,15 @@ return empty.new( locals() ) -def srv_loop_cmd( host, port, name, cmd ): +def srv_loop_cmd( host, port, name, cmd, mode ): def th_func( sc ): proc = fio_ut.proc_new( cmd ) def cb( b ): fio_ut.p_b( proc.fo, b ) + if mode == 'all': + fio_ut.close( proc.fo ) return fio_ut.g_b_all( proc.fi ) srv_func = srv_func_new( cb, use_b=True, use_all=True ) @@ -348,15 +350,51 @@ 'srv [ host=localhost ][ port=13579 ] upper', 'srv [ host=localhost ][ port=13579 ] eval', 'srv [ host=localhost ][ port=13579 ] srv_name cmd arg ...', + 'srv -a [ host=localhost ][ port=13579 ] srv_name cmd arg ... ( all mode )', 'cli [ host=localhost ][ port=13579 ] upper word word word ...', 'cli [ host=localhost ][ port=13579 ] eval word word word ...', 'cli [ host=localhost ][ port=13579 ] srv_name', + 'cli -a [ host=localhost ][ port=13579 ] srv_name ( all mode )', 'srvs [ host=localhost ][ port=13579 ]', 'kill_base [ host=localhost ][ port=13579 ]', 'kill [ host=localhost ][ port=13579 ] srv_name ( srv_name is upper, eval or ... )' ] dbg.help_exit( '\n'.join( lst ) ) +def run_cli( sc, mode ): + ( fi, fo ) = fio_ut.set_fs_sys_stdio() + + def cnv_out( b ): + if not fio_ut.p_b( sc, b ): + return False + + b = fio_ut.g_b_all( sc ) + if not b: + return False + + if not fio_ut.p_b( fo, b ): + return False + + return True + + if mode == 'all': + buf = b'' + while True: + b = fio_ut.g_b_all( fi ) + if not b: + break + buf += b + cnv_out( buf ) + return + + # mode == 'line' + while True: + b = fio_ut.g_b_line( fi ) + if not b: + break + if not cnv_out( b ): + break + def run(): if len( sys.argv ) < 2: help() @@ -374,6 +412,12 @@ return argv.pop( i )[ len( k ) : ] return dv + def pop_mode(): + if argv[ 0 ] == '-a': + pop() + return 'all' + return 'line' + host = popk( 'host=', 'localhost' ) port = int( popk( 'port=', '13579' ) ) @@ -386,6 +430,7 @@ if cmd == 'base': base_srv( port ) elif cmd == 'srv': + mode = pop_mode() name = pop() if name in names: cb = names.get( name ) @@ -393,8 +438,9 @@ srv_loop( port, name, srv_func.func, host ) else: cmd = ' '.join( argv ) - srv_loop_cmd( host, port, name, cmd ) + srv_loop_cmd( host, port, name, cmd, mode ) elif cmd == 'cli': + mode = pop_mode() lst = get_srvs( host, port ) name = pop() if name not in lst: @@ -414,21 +460,7 @@ break dbg.out( '{} --> {}'.format( w, r ) ) else: - ( fi, fo ) = fio_ut.set_fs_sys_stdio() - while True: - b = fio_ut.g_b_line( fi ) - if not b: - break - - if not fio_ut.p_b( sc, b ): - break - - b = fio_ut.g_b_all( sc ) - if not b: - break - - if not fio_ut.p_b( fo, b ): - break + run_cli( sc, mode ) close( sc ) elif cmd == 'srvs':