|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey 2:5020/400 12 Nov 2003 14:32:45 To : Andrey Sapozhnikov Subject : Re: Копирование выводимого через STDOUT -------------------------------------------------------------------------------- Andrey Sapozhnikov wrote to Andrey on Tue, 11 Nov 2003 19:05:17 +0000 (UTC): AS> Andrey wrote: ??>> Имеется скрипт, выводящий данные через STDOUT (ActivePerl 5.8.0). ??>> Подскажите, пожалуйста, можно ли обеспечить ??>> копирование этих данных в файл не прибегая к ??>> изменениям в коде всюду, где встречается print? ??>> Мои попытки придумать что-либо с использованием ??>> синонимов файловых дескрипторов к успеху не привели. AS> AS> Можно. И даже несколькими способами. Hапример: AS> AS> open(STDOUT, '| tee logfile'); AS> или читать , главу Tying FileHandles Спасибо за ответ. Да, подобный вариант решения проблемы я уже находил в разделе 7.18 книги "Perl Cookbook". Однако здесь предполагается наличие программы tee, которой нет под win32. Я пробовал применить предложенную в разделе 8.19 книги альтернативу программе tee - tctee, попытавшись максимально упростив ее под свой частный вырожденный случай: use strict; $| = 1; open(LOG, ">$ARGV[0]") or die "Can't open file '$ARGV[0]': $!\n"; select((select(LOG), $| = 1)[0]); while (<STDIN>) { print STDOUT $_; print LOG $_; } close(LOG) or die "Can't close file '$ARGV[0]': $!\n"; close(STDOUT); exit 0; Сама по себе эта программа прекрасно справляется со своей задачей, копируя данные из STDIN и в STDOUT и в файл. Hо при открытии канала к ней в конструкции open(STDOUT, "| tctee logfile.txt") or die $!; ошибок не возникает, создается пустой файл logfile.txt и содержимое STDOUT никуда не выводится. Понять причину этого я пока не могу, поэтому буду читать perldoc perltie. - --- Андрей. --- ifmail v.2.15dev5.1 * Origin: Webplus NEWS server (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/9252ea510fd2.html, оценка из 5, голосов 10
|