git fetch を実行しているときに出力を取得しようとしていますが、ユーザー名の要求が停止しており、それを検出できません。
すなわち:私がやっているPythonスクリプトで:
cmd = 'git fetch origin master'.split()
import subprocess
p = subprocess.Popen(cmd, cwd='.',stderr=subprocess.PIPE)
while p.poll() is None:
r = p.stderr.read(1)
print(r)
そして、何も印刷せずに停止します。stderr をパイプせずに実行すると、ユーザー名を要求するメッセージが表示されます (したがって、書き込み中ですが、stderr.read は何も検出しません)。
[16:41:45 X:\]python test.py
Username for 'my.domain.com.br':
stderr.fileno() を直接処理し、Popen bufsize を変更し、process.stdin に書き込み、stdin を閉じたり、さまざまなことを試してみましたが、役に立ちませんでした。それを機能させる方法を知っている人はいますか?(私の感覚では、msysgit は、フラッシュしたり、新しい行を書いたりせずに、ユーザー名を要求するように書いているだけで、Python はそれを適切に処理できません。その場合、msysgit でのみ修正される可能性があります? --パイプしないでください。これは奇妙です)。
コンテキスト: 複数のリポジトリを一度に処理するのに役立つプログラムを実行しています (https://github.com/fabioz/mu-repo)。これは、多くのリポジトリに対して一度に実行できるため、パイプする必要はありません。あまりにも多くのものが文字化けしているように見えるため、実際にはオプションではありません(sshアクセスが指定されているか、パスワードが他の方法で既に設定されている場合は機能しますが、プロセスが待機していることをユーザーに伝える方法が必要ですそこにぶら下がるのではなく入力します-パスワードが要求された場合にgitが失敗することを確認して実行する方法があれば、それで十分です)。