使用perl调用jar并使用STDIN传递变量

时间:2014-04-28 18:02:55

标签: java perl jar stdin

我使用以下命令通过perl调用jar。

my $command = "$java_home/bin/java my_jar.jar ARG1 ARG2 ARG3";
my $result = `$command 2>&1;

然而,我的JAR也期望通过STDIN进行论证。我需要知道如何传递这些论点。我试过像普通的论点那样传递它们,但这并没有奏效。我在一个论坛上看到OPEN2可能有用但是在阅读完文档之后我无法弄清楚如何使它工作。

关于如何使这项工作的任何想法都会很棒。

提前致谢。

1 个答案:

答案 0 :(得分:3)

由于您需要从Java进程发送和接收数据,因此您需要双向通信。这就是IPC::Open2旨在做的事情。这允许您创建一个专用管道,使STDIN / STDOUT不必要:

use IPC::Open2;

my $pid = open2( \*from_jar, \*to_jar, $command )
            or die "Could not open 2-way pipe: $!";

print to_jar, "Here is input\n";  # Pass in data

my $result = <from_jar>;          # Retrieve results

同时考虑IPC::Open3来处理错误。