Perl 스크립트를 통해 특정 출력을 화면 및 기타 선택된 출력으로 파이프하려면 어떻게 해야 합니까?
답변1
다른 파일 핸들을 사용합니다.
STDOUT
기본적으로 및 가 모두 있습니다 STDERR
. Perl의 함수는 print
실제로 print STDOUT
.
터미널에는 STDOUT
파일 핸들이 제공 1
되고 STDERR
파일 핸들이 제공됩니다 2
.
다음은 각 파일 핸들에 인쇄하고 각 파일 핸들을 /dev/null로 리디렉션하는 예입니다.
$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";'
foo
bar
$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 1> /dev/null
bar
% perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 2> /dev/null
foo
- 첫 번째 명령은 둘 다 인쇄합니다.
- 두 번째 명령은 삭제
STDOUT
하고 인쇄만 합니다.STDERR
- 세 번째 명령은 삭제
STDERR
하고 인쇄만 합니다.STDOUT
또한 고유한 파일 핸들(예: 로그 파일)을 선언하고 해당 파일 핸들로 인쇄할 수도 있습니다. 바라보다 perldoc -f open
.
답변2
Perlipc 문서, 특히 명명된 파이프에 대한 섹션을 읽어보는 것이 좋습니다.
http://perldoc.perl.org/perlipc.html#Named-Pipes
perlipc - Perl 프로세스 간 통신(신호, fifo, 파이프, 안전한 하위 프로세스, 소켓 및 세마포)
외부 프로그램과의 양방향(읽기 및 쓰기) 통신이 필요한 경우 IPC::Open2 또는 IPC::Open3 모듈(표준 Perl 라이브러리, 위의 URL에도 설명되어 있음)이 유용할 수 있습니다.