从标准输入读取密码
Posted
技术标签:
【中文标题】从标准输入读取密码【英文标题】:Read password from stdin 【发布时间】:2010-12-18 05:15:02 【问题描述】:场景:一个交互式 CLI Python 程序,需要密码。这也意味着,没有可能的 GUI 解决方案。
在 bash 中,我可以在不通过屏幕重新提示的情况下读取密码
read -s
Python 有类似的东西吗?即,
password = raw_input('Password: ', dont_print_statement_back_to_screen)
替代方法:在将键入的字符发送回屏幕之前将其替换为“*”(也称为浏览器样式)。
【问题讨论】:
【参考方案1】:是的,getpass
:“提示用户输入密码而不回显。”
编辑:我自己还没有玩过这个模块,所以这就是我刚刚制作的(不过,如果你发现到处都有类似的代码也不会感到惊讶):
import getpass
def login():
user = input("Username [%s]: " % getpass.getuser())
if not user:
user = getpass.getuser()
pprompt = lambda: (getpass.getpass(), getpass.getpass('Retype password: '))
p1, p2 = pprompt()
while p1 != p2:
print('Passwords do not match. Try again')
p1, p2 = pprompt()
return user, p1
(这是 Python 3.x;使用 Python 2.x 时使用 raw_input
而不是 input
。)
【讨论】:
【参考方案2】:>>> import getpass
>>> pw = getpass.getpass()
【讨论】:
是的,它们是电池。 ;-) Python 的一个很酷的地方是它能够轻松地与其他语言的二进制文件绑定,特别是 C,因此利用了很多现有的东西(比如 getpass(),我相信) 更好的是,getpass() 可以处理通过 STDIN 向 CLI 工具提供数据但您希望能够自己输入密码的情况。很棒的工具! @Tiemen 但我来这里是为了寻找解决方案,因为 getpass() 仍在提示我并等待密码,即使我将密码通过管道传输到我的脚本 对我来说,getpass 弹出了一个窗口(不是我想要的,也不是它的帮助所说的)并且在我输入密码时并没有掩盖密码!重现代码:import getpass; getpass.getpass() 但这不会将“*”显示为一种类型。如何实现这一目标?以上是关于从标准输入读取密码的主要内容,如果未能解决你的问题,请参考以下文章