tcl: захватить вывод из "exec diff", который вернул ненулевое значение - PullRequest
2 голосов
/ 19 июля 2010

Я знаю, что обычно используется catch при выполнении команд, которые могут возвращать ненулевое значение ... но как я могу получить выходные данные в этом случае?

Если быть точным, я хочу сделать что-то вродеmsgstr "catch {exec diff fileA fileB} ret".Файлы разные, и значение ret равно 1. Что мне действительно нужно, так это вывод diff, подробные различия.Но я полагаю, что практика "catch {exec ...} err" не обеспечивает этого, верно?

Может кто-нибудь предложить что-нибудь по этому вопросу?Есть ли встроенные команды tcl для изменения файлов?(Я думаю, что можно перенаправить вывод в файл, а затем прочитать файл ... есть ли другие альтернативы?)

Спасибо!XM

1 Ответ

5 голосов
/ 19 июля 2010

Из недавнего моего проекта:

set status [catch {exec diff $file1 $file2} result]
if {$status == 0} {
   puts "$file1 and $file2 are identical"
} elseif {$status == 1} {
   puts "** $file1 and $file2 are different **"
   puts "***************************************************************************"
   puts ""
   puts $result
   puts ""
   puts "***************************************************************************"
} else {
   puts stderr "** diff exited with status $status **"
   puts stderr "***********************************************************************"
   puts stderr $result
   puts stderr "***********************************************************************"
}

Итог, когда файлы различаются, статус равен 1, а $ result содержит вывод diff. В конце вывода diff я получаю «дочерний процесс вышел ненормально». В моем случае я не удалил его, но это должно быть достаточно легко сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...