2011-09-02 3 views
1

Чтобы отладить обработку внешних процессов с помощью Emacs Мне нужна оболочка, которая регистрирует весь поток сообщений.Logger for stdin stdout

Так Emacs отправляет строку в оболочку stdin, обертка записывает ее и отправляет на внешний процесс. Затем обратно выгружайте внешний вывод процесса, оберните журнал и отправьте в Emacs.

Мой опыт работы небольшой, поэтому я задаю вопрос. Может быть, уже существуют стандартные инструменты для этой цели?

How to implement a stdin, stdout wrapper? не отвечает на мой вопрос !!

ответ

1

В этом примере сделать, что я палочка, но в ограниченной форме (терминал выполнен в каноническом режиме, поэтому некоторые полукокса кода не допускается):

 
#!/usr/bin/env expect 

set in [open in.log w] 
set out [open out.log w] 

log_user 0 
set stty_init {-echo} 
exp_internal 1 

# spawn sort 
spawn /bin/prog 
set proc_id $spawn_id 

expect { 
    -i $user_spawn_id -re . { 
     puts -nonewline $in $expect_out(buffer) 
     send -i $proc_id $expect_out(buffer) 
     exp_continue 
    } eof { 
     send -i $proc_id \x04 
     sleep 1 
     send -i $proc_id \x04 
     expect -i $proc_id -re . { 
      puts -nonewline $out $expect_out(buffer) 
      send_user $expect_out(buffer) 
      exp_continue 
     } eof { } 
    } 
    -i $proc_id -re . { 
     puts -nonewline $out $expect_out(buffer) 
     send_user $expect_out(buffer) 
     exp_continue 
    } eof { } 
} 
wait 
1

Я не понимаю ситуацию.

Является ли взаимодействие всем через stdin и stdout? Действительно ли тройник (1) http://unixhelp.ed.ac.uk/CGI/man-cgi?tee не соответствует всем вашим требованиям?

+0

Я могу только сказать, что вы не понимаете ... Посмотрите на http://www.nist.gov/el/msid/expect.cfm. Я ищу уже разработанное решение, но, похоже, нужно писать самостоятельно. – gavenkoa