2013-07-26 34 views
0

目前,我正在從Perl讀取一些數據,我想從Perl檢索每一步的消息。我嘗試使用這個代碼,從Perl到Java的數據檢索

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 

如果我不接受任何參數,那麼我們需要檢索的消息,沒有傳遞的參數。就像我想記錄所有的信息。我試着給出打印數據。這是行得通的。但是如果這個論點沒有通過。我想要那些沒有通過參數的數據。

是否有可能檢索?

+2

所以你[路過的Perl和Java之間的消息](http://stackoverflow.com/questions/17875289/data-retrieval-from-java-to- perl腳本),我看,很有趣。 –

+1

6個小時前你問這個確切的問題,並得到了答案。您接受並評論「答謝它」的答案。那麼,這個新問題是怎麼回事? – TLP

+0

您可能有興趣使用Perl中的JSON模塊發送序列化數據。 – TLP

回答

1

在此,我發現我的上述問題的答案,

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! " }; 
+0

很高興你回來發佈答案。我不知道有足夠的Java來評論這部分,但在Perl部分中,您可以改爲執行'my $ path_to_file;如果(@ARGV){$ path_to_file = $ ARGV [0]; } else {print「參數未通過」; }'這可以讓你在保持代碼整潔的同時在else部分做更多的事情。如果你想傳遞的值爲uname,你可以在if部分執行'my($ left,$ right)= split(/ \ s * = \ s * /,$ path_to_file)',在這種情況下字符串「測試」)將在'$ right'中。 – sundar

+0

Btw是否發佈了您實際發佈的代碼?它看起來像是從Java中的ErrorStream中讀取的,但是在Perl中打印到普通輸出中,如果這不起作用,應該嘗試使用'die'而不是'print'。 'die'有兩個作用:它將輸出打印到標準錯誤輸出而不是普通輸出,並終止腳本(我假設你想要)。 – sundar

+0

實際上,我捕捉到java端的catch部分的錯誤,以及每一個我不希望我的工作停止的錯誤。有些部分我想捕捉,但有些部分即使有錯誤,我想繼續。這就是爲什麼我使用打印而不是死亡。而且,上面只是一些例子。我實際上正在用java和perl進行其他一些過程。 –