
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 lib, 위의 URL에도 설명되어 있음)이 유용할 것입니다.