Nếu bạn không muốn nội dung của stderr, sau đó chụp() lệnh từ IPC::System::Simple Module này là gần như chính xác những gì bạn đang sau:
use IPC::System::Simple qw(capture system $EXITVAL);
my $output = capture($cmd, @args);
my $exit_value = $EXITVAL;
Bạn có thể sử dụng chụp() với một đối số duy nhất để gọi trình bao, hoặc nhiều đối số để tránh trình bao một cách đáng tin cậy. Ngoài ra còn có capturex() mà không bao giờ gọi shell, ngay cả với một đối số duy nhất.
Không giống như các lệnh hệ thống và backticks tích hợp của Perl, IPC :: Hệ thống :: Trả về đơn giản giá trị thoát 32 bit đầy đủ trong Windows. Nó cũng ném một ngoại lệ chi tiết nếu lệnh không thể được khởi động, chết thành tín hiệu hoặc trả về một giá trị thoát không mong muốn.Điều này có nghĩa cho nhiều chương trình, chứ không phải là kiểm tra lối ra giá trị bản thân, bạn có thể dựa vào IPC :: Hệ thống :: đơn giản để làm công việc khó khăn cho bạn:
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 :: Hệ thống :: Đơn giản là tinh khiết Perl, không có phụ thuộc, và hoạt động trên cả hai hệ thống Unix và Windows. Thật không may, nó không cung cấp một cách để chụp STDERR, vì vậy nó có thể không phù hợp cho tất cả các nhu cầu của bạn.
IPC::Run3 cung cấp giao diện sạch và dễ dàng để sửa ống nước chung, nhưng tiếc là không kiểm tra xem lệnh có thành công hay không, vì vậy bạn cần kiểm tra $? theo cách thủ công, điều đó hoàn toàn không vui. Cung cấp giao diện công cộng để kiểm tra $? là cái gì trên to-do list của tôi cho IPC :: Hệ thống :: Đơn giản, vì kiểm tra $? trong một nền tảng thời trang không phải là một nhiệm vụ tôi muốn trên bất cứ ai.
Có các mô-đun khác trong không gian tên IPC:: cũng có thể cung cấp cho bạn trợ giúp. YMMV.
All the best,
Paul
Tôi không biết tại sao các liên kết bị hỏng. Mọi thứ đều ổn trong chỉnh sửa/xem trước. –
Tôi đã gửi perl5porters một bản vá cho IPC :: Open2 và :: Open3 để hiển thị các công cụ waitpid trong SYNOPSIS của các mô-đun đó. :) –