IPC :: Open2中间件

时间:2013-08-30 19:14:02

标签: perl stdin

我想创建一个包装器,它将从STDIN获取数据并将其传递给另一个脚本,等待他的STDOUT响应并将其输出到父端的STDOUT。

我有以下代码,但它似乎不起作用:

test.pl
#!/usr/bin/perl
#
use IPC::Open2;
$pid = open2( \*RDR, \*WTR, '/usr/bin/perl test2.pl');

while (<STDIN>) {
     print WTR; 
}

while (<RDR>) {
     print STDOUT;
}

在test2.pl上,我有:

#!/usr/bin/perl
#

while (<STDIN>) {
     print STDOUT;
}

似乎写入test2.pl但我没有来自test2.pl的反馈。

任何提示?

感谢的,

1 个答案:

答案 0 :(得分:2)

  1. close WTR开始阅读时,您应该STDIN。在你执行此操作之前,你的外部命令会一直保持输入,如果你正在缓冲,你的外部程序将不会终止,也不会输出任何内容。

  2. 您的主要脚本和外部命令中的可能是"suffering from buffering"。 在测试脚本中,您可以将$|=1添加到脚本的顶部,以使其输出更具响应性。但是,您可能无法影响任意外部命令的输出缓冲。

  3. 更新:IPC::Open2已经在写文件句柄上设置了autoflush,因此外部命令不会缺乏输入。