我试图在执行 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 会失败,那也足够了。
请您参考如下方法:
为用户名和电子邮件设置全局配置。然后 git 将不会提示这些。
git config --global user.name "Your Name"
git config --global user.email "your@email.address"
