Разные заметки

вторник, 18 мая 2010 г.

Perl перенаправление ввода-вывода

#!/usr/bin/perl
### ПЕРЕМЕННЫЕ
$log="log.log";
$out="out.dat";
$err="err.dat";
###
#system ("rm $out $log $err");
 

### Сохраняем стандартный вывод и вывод ошибок
open(SAVEOUT, ">&STDOUT");
open(SAVEERR, ">&STDERR");
 

### Открываем файл для записи
open (LOG,"> $log") or die "do not open $log!!!\n";
 
### Процедура вывода в файл
sub prn2f {
        $param =$_[0];
        select (LOG); $|=1;
        print $param;
}
 
### Процедура вывода в изначальный STDOUT
sub prn2std {
        $param =$_[0];
        select (SAVEOUT); $|=1;
        print $param;
        select (LOG); $|=1;
}
 
### Процедура вывода в изначальный STDERR
sub prn2err {
        $param =$_[0];
        select (STDERR); $|=1;
        print $param;
        select (LOG); $|=1;
}
### Перенаправляем STDOUT и STDERR в файлы
sub std2file {
        open (STDOUT, "> $out") or die "do not forward STDOUT to $out...\n";
        open (STDERR, "> $err") or die "do not forward STDERR to $err....\n";
        select(STDERR); $| = 1; # отключаем буферизацию
        select(STDOUT); $| = 1; # отключаем буферизацию


### Восстанавливаем вывод
sub std2std {
        open(STDOUT, ">&SAVEOUT");
        open(STDERR, ">&SAVEERR");
}


### НАЧАЛО   ПРИМЕРА
prn2std ("Вывод в стандартную консоль\n");
prn2f ("Вывод в файл\n");
prn2err("Вывод в поток ошибок\n");

std2file();
prn2std ("Вывод в стандартную консоль\n");
prn2f ("Вывод в файл\n");
prn2err("Вывод в поток ошибок\n");

std2std();

### КОНЕЦ
__END__

Комментариев нет:

Отправить комментарий