2014-02-24 58 views
1

我試圖使用ProcessBuilder檢索python窗體java的版本。試圖從java中檢索python版本

我使用的命令是:

{process = new ProcessBuilder("C:\\Python27\\python.exe", "-V")} 

該命令不返回任何東西。

我幾乎可以肯定,這是正確的語法來檢索Python版本,

{process = new ProcessBuilder("C:\\Python27\\python.exe", "-h")} 

收益預期蟒蛇幫助,但python -V不返回Python版本。

package com.x.x.precheck.python; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.Arrays; 

public class Test { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    Process process = null; 
    try { 
     process = new ProcessBuilder("C:\\Python27\\python.exe", "-V") 
       .start(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    InputStream is = process.getInputStream(); 
    InputStreamReader isr = new InputStreamReader(is); 
    BufferedReader br = new BufferedReader(isr); 
    String line; 

    System.out.printf("Output of running %s is:", Arrays.toString(args)); 

    try { 
     while ((line = br.readLine()) != null) { 
      System.out.println(line); 
     } 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 
} 

回答

1

這是因爲奇怪的是python2.7版本顯示在stderr中。在Python版本3.4此行爲可能會改變看http://bugs.python.org/issue18338

所以不是

InputStream is = process.getInputStream(); 

你應該叫

InputStream stderr = process.getErrorStream(); 
0

我與其他programs.It測試你的代碼的所有作品fine.for例如我給八度而不是蟒蛇,它打印出來,它很奇怪。