输入带星号的密码
input password with astrix
我想一个一个地读取字符并显示给astrix *
。
字符可以显示为 *
,但我无法通过按 Enter.
退出
这是我的代码:
import sys, tty, termios
def getch():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
sys.stdout.write('*')
except:
print "ex"
finally:
termios.tcsetattr(fd, termios.TCSADRAIN,old_settings)
return ch
如果我在 ch = sys.stdin.read(1)
中输入 Enter,return 值是多少?
您可以使用 getpass.getpass 提示用户输入密码。但请注意 getpass
模块不显示 unix 密码提示的星号。
至于问题的第二部分 - sys.stdin.read(1)
returns \n
或 \r
用于 Enter 输入,这取决于您使用的终端。
最后,我举了一个例子,说明如何使用您的函数读取 CR 或 LF:
while True:', '\n']: break
ch = getch()
if ch in ['\r', '\n']: break
sys.stdout.flush()
如果你真的需要为 unix 显示星号,那就是这样。
为了更安全地读取用户密码,请查看 getpass
模块。
它可以简单地导入和使用,如下所示。但请记住,它不会显示星号。
import getpass
password = getpass.getpass('Your message')
Return sys.stdin.read(1)
的值完全取决于您使用的控制台。
我想一个一个地读取字符并显示给astrix *
。
字符可以显示为 *
,但我无法通过按 Enter.
这是我的代码:
import sys, tty, termios
def getch():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
sys.stdout.write('*')
except:
print "ex"
finally:
termios.tcsetattr(fd, termios.TCSADRAIN,old_settings)
return ch
如果我在 ch = sys.stdin.read(1)
中输入 Enter,return 值是多少?
您可以使用 getpass.getpass 提示用户输入密码。但请注意 getpass
模块不显示 unix 密码提示的星号。
至于问题的第二部分 - sys.stdin.read(1)
returns \n
或 \r
用于 Enter 输入,这取决于您使用的终端。
最后,我举了一个例子,说明如何使用您的函数读取 CR 或 LF:
while True:', '\n']: break
ch = getch()
if ch in ['\r', '\n']: break
sys.stdout.flush()
如果你真的需要为 unix 显示星号,那就是这样。
为了更安全地读取用户密码,请查看 getpass
模块。
它可以简单地导入和使用,如下所示。但请记住,它不会显示星号。
import getpass
password = getpass.getpass('Your message')
Return sys.stdin.read(1)
的值完全取决于您使用的控制台。