Наивный подход можно было бы добавить stdin=subprocess.PIPE
к вашей команде, так что вы можете кормить его ввода пароля. Но это не так просто с вводами пароля, которые используют специальные способы ввода клавиатуры.
С другой стороны, как указано в this answer, в командной строке можно передать пароль (хотя не рекомендуется, так как пароль хранится в истории команд git с помощью командной строки!).
Я хотел бы изменить код следующим образом:
- добавить параметр
password
. Если он не установлен, использование питона getpass
модуль для запроса пароля (возможно, вам это не нужно)
- если пароль установлен правильно, передать его в модифицированном командной строке
мое предложение:
import getpass
def gitClone(password=None):
if password is None:
password = getpass.getpass()
proc = subprocess.Popen(['git', 'clone', 'https://someuser:{}@sailclientqa.scm.azurewebsites.net:443/sailclientqa.git'.format(password)], stdout=subprocess.PIPE)
stdout,stderr = proc.communicate()
print(stddata)
print (stderr)
альтернатива, если вышеупомянутое решение не работает, и если вы не можете ключи SSH настройки, чтобы использовать pexpect
модуль, который обрабатывает специальный пароль входных потоков:
def gitClone(mypassword):
child = pexpect.spawn('git clone https://[email protected]:443/sailclientqa.gi')
child.expect ('Password:')
child.sendline (mypassword)
Имеет хорошее преимущество не хранение пароля в истории команд git.
источник: How to redirect data to a "getpass" like password input?
Я пробовал это. Вот мой код 'proc = subprocess.Popen (['git', 'clone', 'https: //[email protected]: 443/sailclientqa.git'], stdin = subprocess.PIPE) proc.communicate ('5pac1ientd15tqa') ' По-прежнему не работает –
Я не могу настроить SSH для этого случая. Это временный репозиторий GIT для Azure для развертывания. Я не могу получить https: // user: pass/someurl/.git. Единственное решение, которое у меня есть, - это выяснить его через python. Не знаете, как это дубликат, когда исходный вопрос касается git, где я хочу, чтобы это было адресовано python. Я вижу сходство с вашей точки зрения, хотя мой вопрос более специфичен с точки зрения python. –