2011-08-16 75 views
0

我有一個perl腳本,從遠程服務器抓取一些文件,我希望能夠表示進度。我試圖做到這一點的方法是這樣的:cygwin似乎吞嚥我的回車

print "\tDownloading comp.reg.binary.sdiff.log...\n"; 
    if(does_file_exist('comp.reg.binary.sdiff.log', @ret)){ 
     $sftp->get("t-gds/log/comp.reg.binary.sdiff.log", $saveDir, sub { 
      my($sftp, $data, $offset, $size) = @_; 
      print "\tRead $offset of $size bytes\r"; 
     }); 
     print "\n\tDownloaded.\n"; 
    }else{ 
     print "\tFile not found on server...skipping.\n"; 
    } 

然而,cygwin的似乎吞下回車和不打印任何東西,直到最後的打印語句。我懷疑這是因爲腳本運行速度太快,因爲當我將\ r更改爲\ n時,我可以看到它們慢慢地打印出來。

有沒有人有任何想法,爲什麼它不應該如此工作?

回答

2

您是否記得先將$|設置爲1?聽起來不像。

+0

你說得對,我不知道。 – Malfist

1

您的輸出可能是行緩衝的。嘗試將$| = 1;添加到腳本的頂部。如果可行的話,有辦法進行更多的查找控制。

0

您正在使用哪個終端?如果它不是cygwin提供的pty(例如cygwin附帶的rxvt),而是Windows控制檯,則perl可能無法檢測到它正在寫入終端,因此默認情況下會在內部緩衝輸出,直到它可以寫入一個很大的塊。使用$| = 1;明確禁止此緩衝。