В одном из сообщений ниже предлагается метод захвата STDOUT в файл без влияния на запись в STDOUT (терминал).Печать STDOUT для обоих файлов и STDOUT с помощью perl
open my $tee, "|-", "tee E:/log.txt";
Для последовательности, как показано ниже:
print $tee "Log1\n";
print $tee "Log2\n";
my $input = <STDIN>;
print $tee "Log3\n";
Я не вижу никакого сообщения на терминале, если я не обеспечить ввод. После того, как я печатаю любой символ и нажмите клавишу ввода, то я вижу, журналы приходят в
Log1
Log2
Log3
Есть ли способ, таким образом, что я получаю первые два выхода, а затем она ожидает ввода, а затем третий выход?
Или есть способ захвата журналов STDOUT в файл, в то время как журналы STDOUT продолжают поступать на терминал тоже?
Или: использовать IO :: Handle; $ tee-> autoflush (1); –
Спасибо, это работает так, как я ожидал. Не могли бы вы немного объяснить, что это такое? Что означает «$ | = 1»? –
Эта функция находится глубоко в библиотеке Unix C, которая также используется Perl. Чтобы оптимизировать использование ресурсов, он не будет записывать выходные данные сразу, а ожидает, пока буфер не будет заполнен или не будет введен в консоль. $ | специальная переменная может использоваться для отключения этого поведения в Perl. См. Также здесь: http://perldoc.perl.org/perlvar.html#Variables-related-to-filehandles. –