簡易方法是添加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://[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。這是Azure上用於部署的臨時GIT存儲庫。我無法獲得https:// user:pass/someurl/.git。 我唯一的解決方案是通過python找出它。 不知道這是如何重複,當原來的問題是關於混帳在哪裏,因爲我想這個由python解決。我確實從你的觀點看到了相似性,儘管Miney從python的角度來看更爲具體 –