2017-12-28 3 views
0

現在、私は、GUIとpythonスクリプトを使ってプログラムの主な機能を実行するプロジェクトを開発中です。Javaを使用してPythonアプリケーションを実行し、その出力を解析します。

私は、アプリケーションディレクトリ内からpythonスクリプトを実行し、その出力を解析用のGUIプログラムに送信する方法があるのだろうかと思っていました。出力はJSON/YAML/Plaintextなどです(GUIで解析されます)。

つのオプション私は(または動作してもしなくてもよい)の考えは以下の通りであった。

  1. 別途Pythonプログラムを実行して持つが、それはこれがその後、(Javaプログラムによって読み込まれるファイルである出力私最も好きなもの)
  2. ProcessBuilderまたはRuntime.execを使用してPythonプログラムを実行します。ただし、出力はどのようにして得られますか?

私の考えていたオプションがどちらも実現可能でないか、うまくいかない場合は、これをもっとうまくいく方法がありますか?

ありがとうございます!

+1

両方とも動作しますが、私は 'ProcessBuilder#redirectOutput(Redirect)'と 'redirectError'を好むでしょう。ストリームから読み込むために別々のスレッドを使用してください。そうしないと、出力バッファをいっぱいにした後にプロセスがハングすることがあります。 – maaartinus

答えて

1

Runtime.execは、出力を解析するためにバッファされたリーダーにラップすることができる入力ストリームを提供します。

 try { 

     Process p = Runtime.getRuntime().exec("python 1.py'"); 

     BufferedReader stdInput = new BufferedReader(new 
      InputStreamReader(p.getInputStream())); 

     BufferedReader stdError = new BufferedReader(new 
      InputStreamReader(p.getErrorStream())); 

     // read the output from the command 
     System.out.println("Here is the standard output of the command:\n"); 
     while ((s = stdInput.readLine()) != null) { 
      System.out.println(s); 
     } 

     // read any errors from the attempted command 
     System.out.println("Here is the standard error of the command (if any):\n"); 
     while ((s = stdError.readLine()) != null) { 
      System.out.println(s); 
     } 

     System.exit(0); 
    } 
    catch (IOException e) { 
     System.out.println("exception happened - here's what I know: "); 
     e.printStackTrace(); 
     System.exit(-1); 
    } 
+0

あなたの例はかなり不明です。私には 'write.txt'というファイルの読み方のように見えるので、出力を得るためにPythonスクリプトを効果的に実行できるかどうかは私の質問には本当に答えません – rshah

関連する問題