, 다음 IPC::System::Simple 모듈에서 캡처() 명령은 거의 정확하게 당신이있어 무엇 후 : 하나의 인수를
use IPC::System::Simple qw(capture system $EXITVAL);
my $output = capture($cmd, @args);
my $exit_value = $EXITVAL;
당신이 사용할 수있는 캡처() 셸을 호출하거나 여러 개의 인수를 사용하여 셸을 확실하게 피할 수 있습니다. 하나의 인수로도 쉘을 호출하지 않는 capturex()도 있습니다.
Perl의 기본 제공 시스템 및 백틱 명령과 달리 IPC :: System :: Simple은 Windows에서 전체 32 비트 종료 값을 반환합니다. 또한 명령을 시작할 수 없거나 신호가 끊어 지거나 예기치 않은 종료 값을 반환하는 경우에도 자세한 예외가 발생합니다.이것은 당신이 IPC :: 시스템에 의존하는 수 많은 프로그램, 오히려 출구가 자신의 가치를 확인하는 것보다 의미 : 당신을위한 노력을 할 간단한 :
use IPC::System::Simple qw(system capture $EXIT_ANY);
system([0,1], "frobincate", @files); # Must return exitval 0 or 1
my @lines = capture($EXIT_ANY, "baznicate", @files); # Any exitval is OK.
foreach my $record (@lines) {
system([0, 32], "barnicate", $record); # Must return exitval 0 or 32
}
IPC :: 시스템 : 간단한 순수하다 Perl은 의존성이 없으며 Unix 및 Windows 시스템에서 작동합니다. 불행히도 STDERR을 캡처하는 방법을 제공하지 않으므로 모든 요구 사항에 적합하지 않을 수 있습니다.
IPC::Run3은 세 가지 공통 파일 핸들을 모두 다시 배관 할 수있는 깨끗하고 쉬운 인터페이스를 제공하지만 불행히도 명령이 성공했는지 확인하지 않으므로 $? 수동으로, 이것은 전혀 재미 있지 않습니다. $를 검사하기위한 공용 인터페이스 제공? $ 012를 검사 한 이래로 IPC :: System :: Simple에 대한 나의 to-do list에있는 것입니다. 크로스 플랫폼 방식으로 나는 누군가에게 바라는 일이 아니다.
IPC:: 네임 스페이스에는 다른 모듈이있어 도움을받을 수 있습니다. YMMV.
모든 최선을,
폴
출처
2008-09-21 00:57:54
pjf
왜 링크가 엉망인지 모르겠다. 편집/미리보기에서 모든 것이 잘 보입니다. –
perl5porters에게 IPC :: Open2 및 :: Open3에 패치를 보내서 해당 모듈의 구문에 waitpid 항목을 표시합니다. :) –