你知道在Linux中,当你尝试一些Sudo的东西时,它会告诉你输入密码,当你输入时,终端窗口中什么也没有显示(密码没有显示)?
在Python中有办法做到这一点吗?我正在编写一个脚本,需要如此敏感的信息,并希望在我输入它时将其隐藏起来。
换句话说,我希望在不显示密码的情况下从用户那里获取密码。
你知道在Linux中,当你尝试一些Sudo的东西时,它会告诉你输入密码,当你输入时,终端窗口中什么也没有显示(密码没有显示)?
在Python中有办法做到这一点吗?我正在编写一个脚本,需要如此敏感的信息,并希望在我输入它时将其隐藏起来。
换句话说,我希望在不显示密码的情况下从用户那里获取密码。
当前回答
用getpass getpass ():
from getpass import getpass
password = getpass()
可选的提示符可以作为参数传递;默认为Password:。
注意,这个函数需要一个合适的终端,所以它可以关闭输入字符的回显——当从IDLE运行时,查看“GetPassWarning: can not control echo on terminal”了解更多细节。
其他回答
更新@Ahmed ALaa的回答
# import msvcrt
import getch
def getPass():
passwor = ''
while True:
x = getch.getch()
# x = msvcrt.getch().decode("utf-8")
if x == '\r' or x == '\n':
break
print('*', end='', flush=True)
passwor +=x
return passwor
print("\nout=", getPass())
msvcrt只适用于windows,但从PyPI的getch应该适用于两者(我只测试linux)。 您还可以注释/取消注释这两行,使其适用于windows。
用getpass getpass ():
from getpass import getpass
password = getpass()
可选的提示符可以作为参数传递;默认为Password:。
注意,这个函数需要一个合适的终端,所以它可以关闭输入字符的回显——当从IDLE运行时,查看“GetPassWarning: can not control echo on terminal”了解更多细节。
import getpass
pswd = getpass.getpass('Password:')
getpass适用于Linux、Windows和Mac。
您还可以使用pwinput模块,它在Windows和Linux上都可以工作。 它将字符替换为'*'(默认情况下),退格也有效。
import pwinput
password = pwinput.pwinput(prompt='Password: ')
你也可以选择传递一个不同的掩码字符。
import pwinput
password = pwinput.pwinput(prompt='Password: ', mask='')
有关更多信息,请参阅pwinput文档。
这段代码将打印一个星号,而不是每个字母。
import sys
import msvcrt
passwor = ''
while True:
x = msvcrt.getch()
if x == '\r':
break
sys.stdout.write('*')
passwor +=x
print '\n'+passwor