2016-05-24 5 views
0

Java Runtimeを使用して、次のPythonスクリプトのstd出力を印刷します。私の理想的な結果は単に "Hello World"を印刷するだけです。なぜ私はjava.io.IOException: Cannot run program "python": CreateProcess error=2, The system cannot find the file specified at java.lang.ProcessBuilder.startになるのですか? My PathとPythonの環境変数が正しく設定されています。Javaランタイムを使用してPythonスクリプトからstd出力を印刷するにはどうすればよいですか?

String commandline = "python /c start python C:\\Users\\Name\\HelloWorld.py" 

try { 
       //TODO java.io.IOException: Cannot run program "dir" 
       Process process = Runtime.getRuntime().exec(commandline); 
       process.waitFor(); 

       // Store command line output 
       BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); 

       StringBuilder builder = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
        builder.append(line); 
        builder.append(System.getProperty("line.separator")); 
       } 
       String result = builder.toString(); 

       if (result != null) { 
        PrintWriter out = resp.getWriter(); 
        out.println("<div>" + result + "</div>"); 
        System.exit(0); 
       } else { 
        PrintWriter out = null; 
       } 

      } catch (IOException e1) { 
       PrintWriter out = resp.getWriter(); 
       e1.printStackTrace(out); 
      } catch (InterruptedException e2) { 
       PrintWriter out = resp.getWriter(); 
       e2.printStackTrace(out); 
      } 
+0

これを行うことができます...なぜ購入するのですか? Pythonスクリプトの機能をJavaにエミュレートするのはなぜですか?私は答えを追加しますが、何があってもポータブルではないでしょうし、javaやpythonのネイティブソリューションほど良くはありません –

答えて

1

これを行う1つの方法は、あなたのpython出力をファイルに出力するように変更することです。次に、あなたからの出力が含まれている必要があり、Javaがファイルを処理するために読んで/ファイルを開くために持っている百万個の方法のいずれかを使用し

String commandline = "python /c start python C:\\Users\\Name\\HelloWorld.py > output.txt" 

:私はあなたが単純にプロセス文字列を変更することで、多少、これを行うことができると信じてPythonプログラム。 PythonスクリプトはJVMで実行されないので、Javaプログラムの命令は同期的なので、完了までに時間がかかることがあるので、thread.sleep(1000)を追加するとよいでしょう。

関連する問題