簡體   English   中英

正確使用IPC :: Run在Perl中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM