2014-01-07 4 views
-2

У меня есть процесс perl, который работает каждый день автоматически, он занимает около 20 минут и финиш и печатает каждую операцию, чтобы сообщить, что каждая операция занимает около секунды.Запись на стандартный вывод

Иногда кажется, что stdout застрял, и мне нужно нажать «Ввод», чтобы процесс продолжал работать.

может ли кто-нибудь испытать такую ​​проблему/предложение, как справиться с этой проблемой?

ниже снимок моего кода:

foreach (<>) { 
    chomp; 
    if (validate($_) == 0) { 
     print "$_ validated with Success\n"; 
    } 
    else { 
     print "$_ validated with failure\n"; 
    } 
} 
+1

Я не могу не видеть код; предпочтительно минимальное количество, необходимое для демонстрации проблемы. –

+1

В какой операционной системе? Linux (или, тем не менее, Windows)? Может понадобиться промывка (буферизованный выход). Или окно терминала заблокировано. –

+0

в операционной системе Windows – user3019319

ответ

1

Как пишет Билл Ruppert, вам нужно использовать while (<>) вместо foreach (<>) для того, чтобы позволить print заявления должны быть выполнены после того, как каждая строка ввода считывается.

Как пишет Joop Eggen, вы должны убедиться, что ваш стандартный вывод не записан в блоках, чтобы убедиться, что каждая строка вывода появляется сразу после выдачи выписки print. Это можно сделать, установив переменную $|.

Смежные вопросы