Skip to main content
 首页 » 编程设计

python之在 Python 中的 msysgit 上询问用户名时获取输出(在 Windows 上)

2025年05月04日8Renyi-Fan

我试图在执行 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"