Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > перенаправить stdout


Автор: zomber 9.5.2011, 18:04
можно ли изнутри perlовской программы перенаправить stdout куда-то еще ?

Автор: alezzz 9.5.2011, 19:08
если кроме STDOUT куда-то еще, то похоже на UNIX утилиту tee. В Perl есть аналоги, смотрите на cpan

Автор: Pfailed 9.5.2011, 19:26
zomber, 
просто переоткройте его
Код

open STDOUT, '>', '/dev/null'

Автор: alezzz 9.5.2011, 20:16
Pfailed, как я понял это не совсем то, так вывод будет идти только в /dev/null (в данном случае).

P.S. perldoc еще рекомендует закрывать STDOUT перед этим

Автор: Pfailed 9.5.2011, 21:56
alezzz, вам показалось, что автору нужно раздваивать вывод.
Но если всё же нужно, то можно попробовать делать это с помощью связывания ф-цией tie.
Небольшой пример печатающий и в файл и на экран одновременно:
Код

package Tee;

use strict;
use Symbol;

sub TIEHANDLE {
    my $fh = gensym;
    
    open ${*$fh}, '>/dev/stdout'
        or die $!;
    open $fh, '>/tmp/t'
        or die $!;
    bless $fh, $_[0];
}

sub PRINT {
    my $fh = shift;
    my $stdout = ${*$fh};
    
    print $stdout @_;
    print $fh @_;
}

sub DESTROY {
    my $fh = shift;
    close ${*$fh};
    close $fh;
}

package main;

tie *STDOUT, 'Tee';
print "Hello zorld\n";


Автор: zomber 9.5.2011, 23:32
Цитата

Pfailed, как я понял это не совсем то, так вывод будет идти только в /dev/null (в данном случае).


не, норм. мне так и надо (не в /dev/null, конечно)

Цитата

P.S. perldoc еще рекомендует закрывать STDOUT перед этим


о как. а зачем ?
во всяком случае, у меня без этого всё заработало

ЗЫ всем спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)