GitPython / subprocess - как запустить команду Git с парой ключей конфигурации - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь написать валидацию для переданного Git URL, если он доступен, не пытаясь напрямую его клонировать.Я обнаружил, что использование git ls-remote позволяет это сделать, но мне трудно переписать его на Python.Мне нужен неинтерактивный способ проверки этого (например, отсутствие запроса пароля и т. Д.), Поэтому я достиг этой команды, которая работает в оболочке:

$ git -c core.askpass='echo' ls-remote https://github.com/auhau/AuHau.githuasdfasdfb.io

Я использую GitPython, поэтому первым подходом былоиспользуйте их git.cmd.Git оболочку, так как они не имеют для этого открытой функциональности.После некоторого сражения я достиг:

from git.cmd import Git
git = git()
git(c='core.askpass=\'echo\'').ls_remote('https://github.com/auhau/AuHau.githuasdfasdfb.io', shell=True)

что согласно выводу отладки правильно переводится в исходную команду оболочки, если я запускаю эту собранную команду в оболочке, я получаю ожидаемый результат.Но при вызове GitPython я получаю страницу помощи Git.

Итак, вторая попытка - использовать модуль subprocess напрямую для непосредственного вызова git.

import subprocess
import shutil

url = 'https://github.com/auhau/AuHau.githuasdfasdfb.io'
git_bin = shutil.which('git')

r = subprocess.run([git_bin, '-c','core.askpass=\'echo\'','ls-remote', url], capture_output=True)

При этом у меня запрашивают имя пользователя / пароль, поэтому, очевидно, askpass работает неправильно.Если я использую shell=True для вызова подпроцесса, то он работает как положено, но я бы хотел этого избежать из-за соображений безопасности и производительности ...

Есть идеи?Пожалуйста?

...