我在执行 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 上?——尽管它确实出现在 shell 中,如果我不要管它,这很奇怪)。
上下文:我正在做一个程序来帮助一次处理多个存储库(https://github.com/fabioz/mu-repo),所以,因为它可以一次为许多存储库执行它,而不是管道它不是一个真正的选项,因为太多的东西看起来是乱码(如果指定了 ssh 访问权限或密码已经通过其他方式设置,那么事情确实有效,但我想有办法告诉用户进程被卡住等待输入而不是仅仅挂在那里——如果有办法执行它,确保在询问密码时 git 会失败,这也足够了)。