2009-11-23 5 views
7

진행률 표시 줄을 출력하고 싶지만 Perl에서 터미널 너비를 어떻게 검색합니까?Perl에서 터미널 폭을 검색하려면 어떻게해야합니까?

필자는 컴파일러에 액세스 할 수 없기 때문에 핵심 Perl 솔루션을 선호합니다. 이미 설치된 5.8.2 Perl.

+5

. 동일한 호스트에서 컴파일해야한다는 법률은 없습니다. –

+0

[빈정] 일반적으로 예 ...하지만 여기에는 없습니다. 모든 사람들이 자바와 펄을 어느 상자에서나 개발할 수 있다는 것을 알고 있기 때문에, 개발 환경에서 개발 환경과 동일한 환경 (읽기 아키텍처)을 가질 필요가 없습니다 ... [/ 풍자적 인] –

+1

왜 풍자? 나는 너에게 진지한 대답을하고있다. 귀하의 개발 및 생산 시스템은 별 문제가되지 않습니다. 둘 중 하나에 크로스 컴파일 할 수 있습니다. 당신은 여기 도움을 청하기 위해 왔고 나는 당신에게 무료 도움을주었습니다. 그래서 그것에 똥을 내지 마십시오. –

답변

26

Perl과 함께 제공되는 FAQ는이 질문에 대한 답변을 제공합니다. perldoc -q "screen size"을 실행하면 다음과 같이 표시됩니다.

어떻게 화면 크기를 얻을 수 있습니까?

당신은 CPAN에서 Term::ReadKey 모듈을 설치 한 경우에는 문자 픽셀의 폭과 높이를 가져 오는 데 사용할 수 있습니다 :

use Term::ReadKey; 
($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize(); 

이 원시 "IOCTL"보다 더 많은 휴대용입니다,하지만 설명과 같이 당신이 순수한 펄 솔루션을 원하는 경우

require 'sys/ioctl.ph'; 
die "no TIOCGWINSZ" unless defined &TIOCGWINSZ; 
open(TTY, "+</dev/tty") or die "No tty: $!"; 
unless (ioctl(TTY, &TIOCGWINSZ, $winsize='')) { 
    die sprintf "$0: ioctl TIOCGWINSZ (%08x: $!)\n", &TIOCGWINSZ; 
} 
($row, $col, $xpixel, $ypixel) = unpack('S4', $winsize); 
print "(row,col) = ($row,$col)"; 
print " (xpixel,ypixel) = ($xpixel,$ypixel)" if $xpixel || $ypixel; 
print "\n"; 

그래서 당신은 마지막 하나를 사용할 수 있습니다, 또는 당신이 간단한 해결책을 원하는 경우 CPAN에서 Term::ReadKey 설치 귀하의 코드에서하지만 더 많은 - 앞에 설정합니다.

+0

오류 메시지에 암시 된대로'h2ph'를 어떻게 실행합니까 :'@INC에서 sys/ioctl.ph를 찾을 수 없습니다 (실행 했습니까? h2ph?)' –

+0

@Steve :'h2ph'를 실행하려고하면 어떻게됩니까? – Ether

+0

@ 기타 :'h2ph'의'-d' 옵션을 놓쳤습니다. 이제'ioctl.pl : ioctl TIOCGWINSZ (40007468 : 시스템 호출이 유효하지 않은 매개 변수를 받았습니다.) '라고 말합니다. –

5

Term::Size::Any 당신이 겪은 것처럼 보입니다.

+0

코어 펄의 일부가 아니지만 여전히 알고 있는게 좋다. –

+1

순수 펄 버전이있다. 그것을 설치하기 위해 컴파일러가 필요하지 않습니다. – Dan

+0

@Dan : 오 ... 알겠습니다 .-) –

6

진행률 표시 줄을 만들려면 세부 사항을 신경 써야합니다. 많은 progress bar modules on CPAN 중 하나를 사용하고 끝내십시오.

+0

+1. 너무 나쁜 Term :: ProgressBar 또한 필요합니다 Term :: ReadKey :-( –

4

이것은 분명히 플랫폼에 따라 다르지만 리눅스 상자 밖으로 작동하는 매우 간단한 해결책은 이것이다 : 당신은 항상 컴파일러에 액세스 할 수

my $width = `tput cols`; 
+0

이것은 Cygwin에서도 작동합니다! Thx! – TrueY

관련 문제