2017-02-23 17 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(); 
    } 
} 

が期待通りに出力を提供しますdirgit 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'呼び出しはすべての入力、出力、エラーを端末にリダイレクトし、入力を必要としないプロセスに対して正しく動作するはずです。 –

関連する問題