2013-12-11 1 views
0

RKHunter 검사를 실행하는 Perl CGI를 쓰려고합니다. 이 명령을 실행하는 동안 다른 파일로 리다이렉트 될 실제 출력 대신 진도를 나타내는 것을 보여주고 싶습니다. 지금까지의 코드는 다음과 같습니다.Perl - system() 명령 실행 중 진행 상태 표시

open(my $quik_rk, '-|', 'rkhunter', '--enable', '"known_rkts"') or print "ERROR RUNNING QUICK ROOTKIT CHECK!!"; 
     while(<$quik_rk>) 
     {  print "."; 
     }  
     print "\n"; 
     close($quik_rk); 

출력이 표시되지 않고 실행 완료를 기다리는 동안 빈 화면이 표시됩니다. . 내가 리디렉션하려면 다음을 사용할 때 모든 도트가 화면 함께 ​​대신에 하나씩 인쇄됩니다, 또한,이 명령은 전혀 실행되지 않습니다

open(my $quik_rk, '-|', 'rkhunter', '--enable', '"known_rkts"', '>>', '/path/to/file') or print "ERROR RUNNING QUICK ROOTKIT CHECK!!"; 

을 내가에서이 문제를 해결할 수있는 방법 자세한 출력을 파일로 리디렉션하고 화면에서 꾸준히 .... 만 진행하면됩니다.

+1

http://stackoverflow.com/q/1645308/1030675 – choroba

답변

2
$|=1; 

스크립트 시작 부분. 이렇게하면 자동 인쇄가 켜져 버퍼를 플러시하기 전에 줄 바꿈을 기다리지 않고 실제로 인쇄 할 때마다 인쇄됩니다.

또한 참조 : http://perldoc.perl.org/perlvar.html#Variables-related-to-filehandles

+0

그래서 나는 그것이 정상적인 동작을 다시 시작하도록 실행 이후의 autoflush을 해제해야합니까? – rahuL

+0

모든 인쇄 명령 후 계속 플러시됩니다. 실제로 동일한 스크립트 내에서 인쇄하기 전에 개행 문자를 포함하지 않는 여러 인쇄 명령을 실제로 버퍼링하지 않으려는 경우가 아니라면 그 명령 행렬에 눈치 채지 못할 것입니다. 물론'$ | = 0;'을 사용하여 다시 되돌릴 수 있습니다. 그런 다음 줄 바꿈과 관련된 내용 만 인쇄합니다. – DeVadder

+0

Ok 고맙습니다 :) – rahuL

관련 문제