如何将数据重定向到像密码输入这样的"getpass"?

Fan*_*Lin 6 python passwords stdin getpasswd

我正在拧一个python脚本来运行一些命令.有些命令要求用户输入密码,我确实尝试在他们的stdin中输入数据,但是它不起作用,这里有两个简单的python程序代表问题

input.py

import getpass

print raw_input('text1:')
print getpass.getpass('pass1:')
print getpass.getpass('pass2:')
Run Code Online (Sandbox Code Playgroud)

put_data.py

import subprocess
import getpass

def run(cmd, input=None):
    stdin=None
    if input:
        stdin=subprocess.PIPE
    p = subprocess.Popen(cmd, shell=True, stdin=stdin)
    p.communicate(input)
    if p.returncode:
        raise Exception('Failed to run command %r' % cmd)

input ="""text1
password1
password2
"""
run('python test.py', input)
Run Code Online (Sandbox Code Playgroud)

这是输出

[guest@host01 ~]# python put_data.py 
text1:text1
pass1:
Run Code Online (Sandbox Code Playgroud)

它只是停在pass1字段上.这是问题,为什么我不能将数据放到stdin来将数据提供给密码字段?如何将数据写入密码字段?

use*_*312 2

对于这种情况,您需要pexpect模块。

Pexpect 是一个 Python 模块,用于生成子应用程序并自动控制它们。Pexpect 可用于自动化交互式应用程序,例如 ssh、ftp、passwd、telnet 等。