2014-07-01 23 views
0

注:python.exe的路徑已被設置的Java成參數傳遞給一個Python腳本

我試圖創建一個傳遞變量args(或任何其他變量)到Python腳本的Java程序。

import java.io.*; 

public class PythonCallTest{ 

    public static void main (String[] args){ 
     String s = null; 

     Runtime r = Runtime.getRuntime(); 
     try{ 
      Process p = r.exec("cmd /c python ps.py+",args); 

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

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

      while ((s = stdInput.readLine()) != null){ 
       System.out.println(s); 
      } 

      while ((s = stdError.readLine()) != null){ 
       System.out.println(s); 
      } 

      System.exit(0); 
     } 
     catch(IOException ioe){ 
      ioe.printStackTrace(); 
      System.exit(-1); 
     } 
    } 
} 

的程序編譯但是當我

java PythonCallTest sender-ip=10.10.10.10 

運行它我得到錯誤

「蟒」不被識別爲一個內部或外部的命令,運行程序或批處理文件。

如何正確將字符串中r.exec( 「CMD/C蟒蛇ps.py +」,參數)

編輯

如果我執行以下

Process p = r.exec("cmd /c python ps.py sender-ip=10.251.22.105"); 

然後該程序起作用。 python.exe的路徑已被設置。我只需要知道如何添加ARGS到r.exec,即如何連接CMD/C蟒蛇ps.py與ARGS

+2

可能的複製http://stackoverflow.com/questions/17953124/python的不被識別爲內部或外部命令爲什麼 –

+0

此外,可能重複的http://stackoverflow.com/questions/14433499/python-is-not-recognized-as-an-內部或外部命令 –

+0

@Andrew_CS如果你說wha,它可能會更容易你認爲問題不在於說問題是重複的。這兩個其他問題可以幫助他解決他的問題,但沒有你說你認爲PATH問題是問題,他們不一定能提供任何幫助。 –

回答

2

你傳入args作爲Runtime.exec(...)第二個參數。

這會覆蓋新進程的默認(繼承)環境,因此該變量不再包含python.exe的路徑。

您需要使用這個版本的Runtime.exec(...)

public Process exec(String[] cmdarray); 

,你會這麼做是這樣的:

public static void main(String[] args) { 
    ... 

    List<String> process_args = new ArrayList<String>(Arrays.asList("cmd", "/c", "python", "ps.py")); 
    process_args.addAll(Arrays.asList(args)); 

    Runtime r = Runtime.getRuntime(); 
    try { 

     Process p = r.exec(process_args.toArray(new String[] {})); 
     ... 
    } catch (IOException e) { 
     ... 
    } 
} 
+0

@它已經添加到PATH中。我應該在原來的問題中提到,如果我執行r.exec(「cmd/c python ps.py sender-ip = 10.10.10.10」),那麼它的工作 – Glowie

+0

我會嘗試你的解決方案並讓你知道 – Glowie

+0

我的不好,我已經改變了解決問題的答案。一個人工作,另一個不工作的原因是你將第二個參數傳遞給'exec'。 –