2014-04-25 13 views
0

내 스크립트에서 다운로드 URL을 묻고 다운로드 대기열로 보냅니다. 다운로드 진행률이 인쇄되어야합니다.Perl print line over 프롬프트

프롬프트를 맨 아래에 유지하고 상태를 확인하는 방법을 찾지 못했습니다. CPAN에서 검색을 시도했지만 모듈이 없습니다.

도움 주셔서 감사합니다.

#!/usr/bin/perl 
use 5.14.0; 
use strict; 
use warnings; 
use Term::UI; 
use Term::ReadLine; 
use threads; 
use Thread::Queue; 

sub rndStr{ join'', @_[ map{ rand @_ } 1 .. shift ] } 

my $q = Thread::Queue->new(); # A new empty queue 
my $thr = threads->create(
    sub { 
    while (defined(my $item = $q->dequeue())) { 
     say "Downloading: ".$item; 
     sleep 1; 
     #$q->enqueue(1..10) if $item eq '10'; 
     $q->enqueue(rndStr rand (15)+5, 'a'..'z', 0..9); 
    } 
    } 
); 

$q->enqueue(rndStr 10, 'a'..'z', 0..9); 
my $url; 
my $term = Term::ReadLine->new('brand'); 
while ($url ne 'end'){ 
    $url = $term->get_reply( 
     prompt => 'URL to download', 
     default => 'end'); 
    $q->enqueue($url); 
} 
say "Finishing remaining downloads"; 
$q->enqueue(undef); 
$thr->join(); 
+0

당신은 가능성이 "저주"모듈을 찾고 있습니다 - https://metacpan.org/search?q=Curses – amon

+0

Windows 시스템에서 "Curses"가 Win ([Bug] (https://rt.cpan.org/Public/Bug/Display.html?id=47785))과 작동하지 않습니다. 나는 그것을 내 시스템에 설치할 수 없다. – Lebewesen

답변

2

당신이 뭘 하려는지의 기본 단지 주변에 커서를 이동합니다 ANSI 코드를 사용합니다. ncurses (windows 버전 : http://gnuwin32.sourceforge.net/packages/ncurses.htm)과 같은 것을 사용하면됩니다. 또한

(이 두 링크에서 설명하는) 원시 ASCII/ANSI 코드로 그것을

을 스스로 할 수 또는 마지막으로 당신은 펄 모듈 사용할 수 있습니다 Win32 :: Console :: ANSI이 작업을 도와줍니다. http://metacpan.org/pod/Win32::Console::ANSI

이 같이 10

내가 에서 Win32 :: 콘솔 : ANSI보고 제안 펄 질문

+0

제 질문에 대한 코멘트에서 Curses는 Windows에서 작동하지 않습니다. – Lebewesen

+0

글쎄 ANSI/ASCII 창문에 확실하지 않습니다! – Jeef

+1

http://search.cpan.org/~jlmorel/Win32-Console-ANSI-1.08/lib/Win32/Console/ANSI.pm – Jeef

2

say 출력에 개행을 추가합니다. 대신 print을 사용하십시오. 이전의 출력을 통해 작성하는 캐리지 리턴을 추가

print "Downloading: ".$item."\r";

+0

죄송합니다.이 기능이 작동하지 않습니다! 전혀 출력이 없습니다. – Lebewesen