2011-05-24 52 views
2

好了,我有类似你看到下面的东西,我的问题是,打印功能不打印,直到实际的命令完成,我希望它打印
一些子例程“拥有的MySQL ,安装:“,然后执行该命令,然后打印确定。我已经尝试使用睡眠并尝试清除$ ssh_d对象。任何意见赞赏。不要担心在这个特定的子变量,这个问题正在发生。多谢你们。Perl的不正常打印

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"; 
} 
+0

当你运行这个没有ssh cmd调用(我假设sshd指的是Net :: SSH :: Perl),它打印出来了吗?不知何故,我猜测cmd调用对stdout句柄做了些什么。 – Horus 2011-05-24 01:24:10

+0

请参阅“忍受缓冲”http://perl.plover.com/FAQs/Buffering.html – tadmc 2011-05-24 03:56:33

回答

13

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

每个打印后打开autoflushing,设置$|为1:

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

(注意:$ |实际上不是一个单一的值,则分别为每个文件句柄跟踪,当设置它, !它会影响设置为当前选定的文件句柄(见select

+0

谢谢!你能告诉我一个如何使用$ |的例子我不熟悉,这个地方永远不会失败lol – noledgeispower 2011-05-24 01:40:35

+0

@noledgeispower:增加一个例子 – ysth 2011-05-24 02:04:45

+0

@ysth:这里需要的自动刷新是否考虑到'STDOUT'(在线缓冲模式)在从'STDIN'读取时自动刷新? – 2012-02-17 15:43:13

5

感谢你能告诉我如何使用$一个例子|我是陌生的,这个地方从来没有失败洛尔 -

请问这是吗?

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

工作很好,谢谢。 – noledgeispower 2011-05-24 02:46:22