Perl не печатает должным образом

perl function printing subroutine

3523 просмотра

2 ответа

36 Репутация автора

Итак, у меня есть несколько подпрограмм, похожих на те, что вы видите ниже, моя проблема в том, что функция печати не печатает до тех пор, пока сама команда не будет выполнена, я хочу, чтобы она напечатала
«Имеет MySQL, Установка:», а затем выполните затем напечатайте ОК. Я уже пытался использовать сон и пытался очистить объект $ 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";
}
Автор: noledgeispower Источник Размещён: 24.05.2011 01:19

Ответы (2)


13 плюса

80585 Репутация автора

Решение

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

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

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

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

Автор: ysth Размещён: 24.05.2011 01:23

5 плюса

89519 Репутация автора

Спасибо! Можете ли вы показать мне пример использования $ | Я незнаком, это место никогда не подведет 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";
Автор: David W. Размещён: 24.05.2011 02:06
Вопросы из категории :
32x32