Перенести построчный вывод perl в файл с помощью команды unix - PullRequest
0 голосов
/ 21 июля 2011

Я создал небольшую программу на Perl в среде Unix:

#! /usr/bin/perl
use strict; 
use warnings; 

my $counter = 0;  
while ($counter < 10) {
  printf "%s\n", $counter;
  $counter++;  
  sleep(2);
}

Если я начну с командной строки, она будет отсчитываться от 0 до 9 через 20 секунд. Это то, что я хочу.

Но если я использую команду для переноса вывода в файл (myprog.pl >> myprog.log), то результат будет записан сразу в конце программы (через 20 секунд).

Я хочу, чтобы программа записывала его вывод построчно в файл. Так что через 10 секунд должно быть 5 строк в myprog.log. Есть ли способ сделать это?

Ответы [ 2 ]

11 голосов
/ 21 июля 2011

Это ожидаемое поведение буферизации, но ваш скрипт может изменить это .

#! /usr/bin/perl
use strict; 
use warnings; 

$| = 1; # <------- Enable autoflush    

my $counter = 0;  
while ($counter < 10) {
  printf "%s\n", $counter;
  $counter++;  
  sleep(2);
}
2 голосов
/ 21 июля 2011

Интересная дискуссия на эту тему: http://perl.plover.com/FAQs/Buffering.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...