这是我的示例python代码
def gitClone():
proc = subprocess.Popen(['git', 'clone', 'https://someuser@sailclientqa.scm.azurewebsites.net:443/sailclientqa.git'], stdout=subprocess.PIPE)
stdout,stderr = proc.communicate('mypassword')
print(stddata)
print (stderr)
每次执行都会导致提示输入密码。在没有密码提示的情况下,从python执行git clone的最佳方法是什么。
我很感激您的专业知识/建议
答案 0 :(得分:1)
天真的方法是将stdin=subprocess.PIPE
添加到您的命令中,以便您可以输入密码输入。但是,使用密码输入并不是那么简单,它使用特殊方式获取键盘输入。
另一方面,如this answer中所述,可以在命令行中传递密码(尽管不建议,因为密码存储在命令行的git命令历史记录中!)。
我会修改你的代码如下:
password
参数。如果没有设置,使用python 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://someuser@sailclientqa.scm.azurewebsites.net:443/sailclientqa.gi')
child.expect ('Password:')
child.sendline (mypassword)
它具有不在git命令历史记录中存储密码的优点。