2014-04-20 91 views
-1

最近我正在嘗試編寫一個Java應用程序來調用SCM.exe來執行代碼加載作業。但是,在通過java成功執行SCM load命令後,我發現我實際上無法真正下載代碼(如使用命令行,需要在執行SCM load命令後輸入密碼)。我是否可以知道在我使用該過程在java中運行SCM之後如何輸入此密碼?如何獲得命令行的輸出並在命令行中輸入內容?通過JAVA應用程序調用SCM

萬分感謝, 埃裏克

回答

0

因爲我不知道到底是什麼SCM.exe你的情況是,我回答,在抽象意義上的輸入/輸出重定向的要求僅涉及什麼。我進一步假設你正在通過System(「...」)調用它需要的任何參數的SCM.exe,這是你無法通過任何進一步輸入(被調用進程的標準輸入)的地方。

您需要在接收到密碼請求時將其傳遞給另一個進程的stdin,這通過使用傳統意義上的管道來解決(因爲您大概在Windows上,YMMV )。更一般地說,你正在處理一個非常簡單的IPC案例。在Java中,你可以通過使用ProcessBuilder [1]找到一個合適的解決方案(雖然我從來沒有這樣做過 - 爲了這個目的,我使用的東西比java簡單得多,但我離題了......)。

溶液的概要是:

  1. 呼叫的過程中,具有其輸入和輸出作爲輸出/輸入從呼叫者java程序流被處理。
  2. 讀你的程序的輸出,直到您查詢密碼
  3. 的密碼寫
  4. 根據需要進行。

如果您需要進一步說明,您可能需要提供有關您的方案的更多詳細信息。

[1] http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html

+0

我已經找到了解決方案來解決它,非常感謝 –

+0

請問你介意(或描述)你的解決方案(可能是對原始問題的編輯),以便對此問題感興趣的其他人可以將其作爲參考。 – h7r

+0

請在下面看到我的回覆,謝謝你的幫助 –

0

公共類的測試{ 公共靜態無效的主要(字串[] args){

try { 
     System.out.println(""); 
     String commands = "C:/swdtools/IBM/RAD8/scmtools/eclipse/scm.exe load -d C:/users/43793207/test -i test -r eric-repo"; 
     // load -d C:/users/43793207/test -i test -r eric-repo 

     test test=new test(); 
     test.execCommand(commands); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public void execCommand(String commands){ 
    //ProcessBuilder pb = new ProcessBuilder(Command); 
    //pb.start(); 
    String line; 

    try { 
     //Process pp = Runtime.getRuntime().exec(commands); 
     System.out.println(commands); 
     Process process = new ProcessBuilder(commands).start(); 
     InputStream is = process.getInputStream(); 
     InputStreamReader isr = new InputStreamReader(is); 
     BufferedReader br = new BufferedReader(isr); 


     while ((line = br.readLine()) != null) { 
      System.out.println(line); 
       } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

這個代碼有一個錯誤,當我輸入命令如「C:/swdtools/IBM/RAD8/scmtools/eclipse/scm.exe」時,它會運行順利。但是當我輸入「C:/swdtools/IBM/RAD8/scmtools/eclipse/scm.exe加載-d C:/用戶/ 43793207/test -i測試-r eric-repo」等附加參數時,它會觸發一個錯誤,「CreateProcess error = 2,系統找不到指定的文件」,任何機構都可以提出任何解決方案來解決它? –

+0

正如ProcessBuilder文檔中所述(鏈接在我的上面的答案中)以及通過參數啓動其他進程的常用方式,您的進程的每個參數(從'load -d'開始的所有內容)都將作爲附加字符串傳遞。您調用的方式將'C:'到'eric-repo'(包含空格)作爲可執行文件路徑。參考SO中的其他答案可以得出同樣的結論。此外,根據常規慣例(即測試,而不是測試)來命名您的課程將是一種很好的做法。 – h7r

+0

非常感謝您的建議:) –

相關問題