2013-03-27 1 views
0

Я ищу способ уменьшить некоторые помехи в некоторых моих сценариях. Я хочу, чтобы какой-то вывод отправлялся в файл, некоторые - на экран, а некоторые - на оба. Это «кое-что для обоих», которое ускользает от меня. Есть ли способ открыть FILEHANDLE, который пойдет как в STDOUT, так и в файл, который уже есть open ed?перенаправление печати на несколько выходных целей

Что-то вроде этого:

open ($file_only, ">", "$logfile"); 
open ($file_and_term, .....); 


print $file_and_term "Nice stuff for the user to see\n"; 
print $file "$some_command\n"; 
print $file `$some_command`; 
$debug && print $file "some debug info goes here, too\n"; 
print "Hey, good job! You're done!\n" 

Моя цель состоит в том, что линии, которые получают отправленные $file_and_term не будет двойных линий, одна собирается $file и один собирается STDOUT. А также сделать его более динамичным, исходя из уровней отладки, возможно, используя инструкцию select, контролируемую уровнем отладки.


Итак, при написании вышеизложенного, я придумал решение, которое соответствует моим потребностям, но не моим желаниям. :) Итак, я опубликую этот вопрос, пока я реализую свое по-другому элегантное решение.


Я закончил тем, что делал это .... это не когда у так хорошо, как обычный print, но я мог бы сделать его более устойчивым позже ....

sub printit { 
    my ($opt, $text) = @_; 
    if ($opt == $FILE || $opt == $BOTH) {print $LOG $text} 
    if ($opt == $TERM || $opt == $BOTH) {print $text} 
}  
+0

http://stackoverflow.com/questions/10519779/perl-redirect-stdout-to-two-files –

+0

у меня есть Perl 5.8.8. У меня нет IO :: Tee, File :: Tee или PerlIO: Util. Кроме того, мой скрипт должен работать как на платформах Unix, так и на Windows. –

ответ

0

Как было предложено an answer to an earlier question , вы можете использовать IO::Tee и сказать

my ($file, $file_and_term); 
open $file, '>', $logfile; 
$file_and_term = IO::Tee->new($file, \*STDOUT); 
+1

На самом деле существует еще более ранний [ответ] (http://stackoverflow.com/questions/5392598), который использует [IO :: Tee] (http://p3rl.org/IO::Tee). –

+0

У меня Perl 5.8.8. У меня нет IO :: Tee, File :: Tee или PerlIO: Util. Кроме того, мой скрипт должен работать как на платформах Unix, так и на Windows. –

+0

@ Стейси Роберт Гринштейн - затем установите их. [Они работают практически на каждой версии и платформе Perl] (http://matrix.cpantesters.org/?dist=IO-Tee+0.64). – mob

Смежные вопросы