我使用以下命令通过perl调用jar。
my $command = "$java_home/bin/java my_jar.jar ARG1 ARG2 ARG3";
my $result = `$command 2>&1;
然而,我的JAR也期望通过STDIN进行论证。我需要知道如何传递这些论点。我试过像普通的论点那样传递它们,但这并没有奏效。我在一个论坛上看到OPEN2可能有用但是在阅读完文档之后我无法弄清楚如何使它工作。
关于如何使这项工作的任何想法都会很棒。
提前致谢。
答案 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
来处理错误。