在perl中,我经常需要运行一个子进程,向它发送一些输入,然后读取它的输出。有许多模块可以做到这一点,但它们似乎都要求您传入预先存在的变量,然后由函数修改这些变量以包含文件句柄。下面是一个来自
IPC::Open3
:
my ($wtr, $rdr, $err);
use Symbol 'gensym'; $err = gensym;
$pid = open3($wtr, $rdr, $err,
'some cmd and args', 'optarg', ...);
当我不得不一遍又一遍地做的时候,这个模式会变得有点烦人,特别是因为它涉及到一堆我需要记住或查找的位置参数。有没有提供函数的模块(我们称之为
myopen3
my ($wtr, $rdr, $err) = myopen3('some cmd and args', 'optarg', ...);
或者它可以返回相关句柄的hash或hashref:
my $process = myopen3('some cmd and args', 'optarg', ...);
$process->{STDIN}->print("Some input");
my $output = $process->{STDOUT}->readline;
是
打电话
和内置的完全一样
system
实际上,我自己实现了这一点(使用一个简单的OO接口),但是如果存在一个CPAN模块来做同样的事情,我宁愿不依赖我自己的定制模块。
IPC::RunSession::Simple
reader
和
writer
读者
方法合并子进程的STDOUT和STDERR,而我希望使用选项将它们分开。