[英]Proper Use of IPC::Run in Perl
我正在嘗試按照https://metacpan.org/pod/IPC::Run中所述運行IPC :: Run
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use feature 'say';
use autodie qw(:all);
use IPC::Run qw(run timeout);
my ($out, $err);
## First,a command to run:
my @cat = qw( cat );
## Using run() instead of system():
my $in = __FILE__;
run \@cat, \$in, \$out, \$err, timeout( 10 ) or die "cat: $?";
say "\$out = $out";
say "\$err = $err";
say "\$in = $in";
但是,輸出不正確:
con@con-VirtualBox:~/Scripts$ perl ipc_run.pl
$out = ipc_run.pl
$err =
$in = ipc_run.pl
$out
只是文件名,應該是文件內容。 這應該在命令行上執行cat ipc_run.pl
如何獲得$out
來按原樣顯示輸出?
您正在將文件名作為STDIN
傳遞給cat
,並且由於您沒有將任何參數傳遞給它,因此它會將其重復輸出。 這就是cat
工作方式。 而是將文件名作為參數傳遞:
use strict;
use warnings;
use IPC::Run qw(run timeout);
my @cat = ('cat', __FILE__);
run \@cat, \undef, \my $out, \my $err, timeout( 10 ) or die "cat: $?";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.