2017-02-23 303 views
1

我敲了一個應用程序試圖幫助我的構建過程,並試圖包含一個git pull origin命令。我試過並測試過各種方法,但似乎無法獲得任何輸入或輸出以使用該命令。使用ProcessBuilder執行需要命令行輸入的命令

該程序等待Process.waitFor()沒有輸入或輸出。

我假設git pull命令正在等待我輸入用戶名和密碼,但到目前爲止我還沒有確定如何實現這一點。

關於SO覆蓋這些類型的示例有許多問題,但沒有一個答案似乎適用於我的用例。

,我認爲應該工作的最簡單的代碼是:

class CmdTest { 
    public static void main(String[] args) throws Exception { 
     ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "git pull origin"); 
     pb.redirectErrorStream(true); 
     pb.redirectInput(ProcessBuilder.Redirect.INHERIT); 
     pb.redirectOutput(ProcessBuilder.Redirect.INHERIT); 

     Process process = pb.start(); 
     process.waitFor(); 
    } 
} 

dir更換git pull origin將提供輸出預期。

+0

如果你嘗試任何其他的git命令作爲'git status',你會得到任何輸出。這是要知道git命令是否已正確添加到控制檯。 –

+0

@SergioLema是的,'git status'按預期返回輸出。 –

+0

所以,我認爲問題仍然在證書。嘗試配置git使用您的帳戶(user.name和user.email到'.gitconfig') –

回答

0

只做git pull origin沒有默認配置的憑據,git將在任何重要的操作等待他們。在你的代碼中,你不會提供(既不看也沒有)git反饋,所以應用程序在這個階段被卡住了。

配置git默認憑據到您的.gitconfig文件,任何git命令將使用它們,控制檯不會被卡住(既不是你的應用程序)。

+0

這是一種解決方法,而非解決方案。 'redirectXxx'調用應該將所有輸入,輸出和錯誤重定向到終端,併爲不需要輸入的進程正確工作。 –