2017-02-07 15 views
1

をここに私はpopenサンプルPythonコードハンドルは、Pythonのプロンプト -

def gitClone(): 
    proc = subprocess.Popen(['git', 'clone', 'https://[email protected]:443/sailclientqa.git'], stdout=subprocess.PIPE) 
    stdout,stderr = proc.communicate('mypassword') 
    print(stddata) 
    print (stderr) 

は、パスワードのプロンプトのすべての実行結果です。パスワードプロンプトを表示せずにpythonからこのgit cloneを実行するには、どうすればいいのですか?

私はあなたの専門知識/アドバイス

+0

私はそれを試みました。これは私のコードです 'proc = subprocess.Popen(['git'、 'クローン'、 'https://[email protected]:443/sailclientqa.git']、stdin = subprocess.PIPE) proc.communicate( '5pac1ientd15tqa') ' まだ動作しませんでした –

+0

このケースではSSHをセットアップできません。これはAzure上の一時的なGITリポジトリです。私はhttps:// user:pass/someurl/.gitのいずれかの仕事を得ることができません。 私が持っている解決策は、Pythonを通して理解することだけです。 元の質問がgitについてのもので、これがpythonによって解決されたい場所である場合、これがどのように重複しているか分かりません。私はあなたの点からの類似点を見ますが、mineyはPythonの観点からより具体的です –

答えて

0

いただければと思いますが、パスワードの入力を養うことができるように単純なアプローチは、あなたのコマンドに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?

  • +0

    あなたの応答に感謝します。あなたは私のために時間がかかることを感謝します。それを試してみました。パラメータとして正しいパスワードを渡しても、依然としてパスワードを要求します。 –

    +0

    私は 'pexpect'モジュールで有望なリードを追加しました。 –

    関連する問題