Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Perl到Java的数据检索_Perl - Fatal编程技术网

从Perl到Java的数据检索

从Perl到Java的数据检索,perl,Perl,目前,我正在从Perl中读取一些数据,我想从Perl中检索每个步骤的消息。我试着用这个代码 Process process = Runtime.getRuntime().exec(new String[] {"perl","C:\\Perl\\bin\\try.pl", "uname=test"}); BufferedReader reader =new BufferedReader(new InputStreamReader(process.getInputStream())); Str

目前,我正在从Perl中读取一些数据,我想从Perl中检索每个步骤的消息。我试着用这个代码

 Process process = Runtime.getRuntime().exec(new String[] {"perl","C:\\Perl\\bin\\try.pl", "uname=test"});
 BufferedReader reader =new BufferedReader(new InputStreamReader(process.getInputStream()));
 String s = reader.readLine();
  System.out.println("perl said [ " + s + " ]");
我的perl脚本如下所示

$path_to_file = $ARGV[0] or die("argument not passed") ;
print "success";
# some code
如果我没有收到任何参数,那么我们需要检索消息,即没有传递任何参数。就像那样,我要记录所有的信息。我试着提供打印数据。这是有效的。但如果争论没有通过。我想要参数未传递的数据


可以检索吗?

我在此找到了我上述问题的答案

Process process = Runtime.getRuntime().exec(new String[] {"perl","C:\\Perl\\bin\\try.pl", "uname=test"});
BufferedReader readError = new BufferedReader( new InputStreamReader(process.getErrorStream()));
    s = readError.readLine();
     System.err.println("perl said [ " + s + " ]");
通过这种方式,我捕获了错误详细信息。谢谢你的建议。另外,我对perl脚本做了如下更改:

my $path_to_file = $ARGV[0] or   {print " Argument not passed! " };

我明白了,你很有意思。看起来你6小时前问了这个问题,并得到了答案。您接受并评论的答案是“谢谢,它起作用了”。那么,新问题是什么呢?您可能对使用Perl中的JSON模块发送序列化数据感兴趣。前面的问题是将数据从java发送到Perl,这就是成功。现在的问题是,在运行流程时,如何将活动从perl恢复到java。我想你最好能理解。请看后面的问题,“很高兴你回来并发布答案。我对Java的了解还不够,无法对这一部分进行评论,但在Perl部分,您也可以使用
my$path\u to\u文件;if(@ARGV){$path_to_file=$ARGV[0];}else{print“Argument not passed”}
这允许您在保持代码整洁的同时在else部分执行更多操作。如果您希望将值传递给uname,可以在
if
部分中执行
my($left,$right)=split(/\s*=\s*/,$path\u to\u file)
,然后值(本例中的字符串“test”)将位于
$right
中。顺便问一下,您发布的代码实际工作吗?看起来您在Java中读取ErrorStream,但在Perl中打印为正常输出,如果不起作用,您应该尝试使用
die
而不是
print
die
有两种效果:它将输出打印到标准错误输出,而不是正常输出,并终止脚本(我假设您需要)。实际上,我在java端的catch部分捕获了错误,而且对于我不希望停止工作的每个错误。有些部分我想捕获,但有些部分即使有错误,我想继续。这就是为什么我使用印刷品而不是模具。而且,上面只是一些例子。我实际上是在用java和perl做一些其他的过程。听起来你在用不必要的复杂方式做这件事。。。如果你说泰米尔语,请随意发邮件到我的邮箱id(在我的个人资料中),我很乐意帮助一位佩勒同事。