
Как перенаправить часть вывода на экран и часть другого выбранного вывода из скрипта Perl?
решение1
Используя разные дескрипторы файлов.
По умолчанию у вас будут и , STDOUT
и STDERR
. print
Функция в Perl на самом деле является сокращенной записью для print STDOUT
.
В вашем терминале STDOUT
указан дескриптор файла 1
и STDERR
указан дескриптор файла 2
.
Вот пример печати в каждый дескриптор файла и перенаправления каждого в /dev/null.
$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";'
foo
bar
$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 1> /dev/null
bar
% perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 2> /dev/null
foo
- Первая команда печатает оба.
- Вторая команда отбрасывает
STDOUT
и печатает толькоSTDERR
- Третья команда отбрасывает
STDERR
и печатает толькоSTDOUT
Вы также можете объявить собственные дескрипторы файлов (например, файл журнала) и печатать в него. См perldoc -f open
. .
решение2
Вам, вероятно, стоит прочитать документацию perlipc, в частности раздел об именованных каналах.
http://perldoc.perl.org/perlipc.html#Именованные-каналы
perlipc - межпроцессное взаимодействие Perl (сигналы, fifo, каналы, безопасные подпроцессы, сокеты и семафоры)
Если вам нужна двусторонняя (чтение и запись) связь с внешней программой, то вам пригодятся модули IPC::Open2 или IPC::Open3 (стандартная библиотека Perl, также задокументированная по указанному выше URL).