2

好的,所以我有一些类似于您在下面看到的子例程,我的问题是打印功能在实际命令完成之前不会打印出来,我希望它打印
“有 MySQL,正在安装:”,然后执行命令然后打印确定。我已经尝试过使用 sleep 并尝试清除 $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";
}
4

2 回答 2

13

STDOUT 通常是行缓冲的,因此在打印换行符之前您不会看到输出。您可以$|在打印前设置以强制打印输出。

要在每次打印后打开自动刷新,请设置$|为 1:

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

(请注意,$| 实际上并不是一个单一的值,它是针对每个文件句柄单独跟踪的。当您设置它时,它会影响当前选定文件句柄的设置(请参阅 参考资料select)。

于 2011-05-24T01:23:40.677 回答
5

谢谢!你能告诉我一个如何使用 $| 的例子吗?我不熟悉,这个地方永远不会失败哈哈——</p>

这会吗?

$| = 1;
print "This is now unbuffered printing. "
sleep 3;
print "You no longer have to wait for the NL character. ";
sleep 3;
print "\n";
于 2011-05-24T02:06:08.130 回答