我正在使用 IPC::Open3 编写一个简单的脚本。该脚本不会向 stdout 或 stderr 产生输出,而我希望向两者输出。
完整源码:
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use IPC::Open3;
pipe my $input, my $output or die $!;
my $pid = open3(\*STDIN, $output, \*STDERR, 'dd', 'if=/usr/include/unistd.h') or die $!;
while(<$input>) {
print $_."\n";
}
waitpid $pid, 0;
我相当确定我错误地使用了 IPC::Open3。然而我还是很困惑我到底要做什么should正在做。
这是pipe
。在不知道为什么它在那里的情况下,我无法说更多。这很好用。
my $reader;
my $pid = open3(\*STDIN, $reader, \*STDERR, 'dd', 'if=/usr/include/unistd.h') or die $!;
while(<$reader>) {
print $_."\n";
}
waitpid $pid, 0;
我意识到这是probably只是一个例子,但万一它不是......这对你正在做的事情来说完全是矫枉过正。您可以使用反引号来实现这一点。
print `dd if=/usr/include/unistd.h`
IPC::Open3 有点过于复杂。还有更好的模块,例如IPC::Run https://metacpan.org/pod/IPC::Run and IPC::运行3 https://metacpan.org/pod/IPC::Run3.
use strict;
use warnings;
use IPC::Run3;
run3(['perl', '-e', 'warn "Warning!"; print "Normal\n";'],
\*STDIN, \*STDOUT, \*STDERR
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)