Perl не печатает должным образом - PullRequest
2 голосов
/ 24 мая 2011

Хорошо, у меня есть несколько подпрограмм, похожих на те, что вы видите ниже, моя проблема в том, что функция печати не распечатывается до тех пор, пока сама команда не будет выполнена, я хочу, чтобы она печатала
"Имеет MySQL, Установка:", а затем выполните команду, затем напечатайте OK.Я уже пытался использовать сон и пытался очистить объект $ ssh_d.Любой совет приветствуется.Не беспокойтесь о переменных в этом конкретном подпрограмме, проблема возникает повсюду.Спасибо, ребята.

if ($MySQL)
{
    print "Has MySQL, Installing: ";
    $mysqlCmd = "/path/to/script/mysql-install.pl $person > /dev/null 2>&1";
    $ssh_d->cmd("$mysqlCmd");
    print "OK\n";
}

Ответы [ 2 ]

13 голосов
/ 24 мая 2011

STDOUT обычно буферизуется строкой, поэтому вы не увидите вывод, пока не напечатаете новую строку.Вы можете установить $| перед печатью для принудительной печати вывода.

Чтобы включить автоматическую промывку после каждой печати, установите $| в 1:

$| = 1;
print "Enter a number between 3 and 5: ";
chomp( my $answer = <STDIN> );

(Обратите внимание, что $ | на самом деле не одно значение, оно отслеживается отдельно для каждого дескриптора файла. Когда вы его устанавливаете, это влияет на настройку для выбранного в настоящий момент дескриптора файла (см. select).

5 голосов
/ 24 мая 2011

Спасибо!Можете ли вы показать мне пример использования $ |Я незнаком, это место никогда не подведет LOL -

Подойдет ли это?

$| = 1;
print "This is now unbuffered printing. "
sleep 3;
print "You no longer have to wait for the NL character. ";
sleep 3;
print "\n";
...