python - 如何将数据重定向到 "getpass"之类的密码输入?

标签 python passwords stdin getpasswd

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

输入.py

import getpass

print raw_input('text1:')
print getpass.getpass('pass1:')
print getpass.getpass('pass2:')

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)

这是输出

[guest@host01 ~]# python put_data.py 
text1:text1
pass1:

它只是停在 pass1 字段上。这就是问题所在,为什么我不能将数据放入标准输入以将数据提供给密码字段?如何将数据写入密码字段?

最佳答案

您需要 pexpect这种情况下的模块。

Pexpect is a Python module for spawning child applications and controlling them automatically. Pexpect can be used for automating interactive applications such as ssh, ftp, passwd, telnet, etc.

关于python - 如何将数据重定向到 "getpass"之类的密码输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4826732/

相关文章:

python - 如何使用每个选择的模板覆盖 ModelChoiceField/ModelMultipleChoiceField 默认小部件

java - 我怎样才能给这个密码字段焦点?

python - 在 Python 中将文件范围传递到 stdin

python - 尝试使用 Cloud TPU 恢复更新的 BERT 模型检查点时出现 InfeedEnqueueTuple 问题

python - 为什么我会收到 NameError?

python - 如何在ansible中设置多个ansible_python_interpreter变量

git - 克隆或推送时询问密码 - docker gitlab

输入后忽略回车键的C代码

linux - Bash:检查 stdin 但将其原封不动地转发给另一个程序?

python - matplotlib seaborn 长行名影响其他子图的轴