我想一一阅读char并显示给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
如果我输入 Enter ,其中ch = sys.stdin.read(1)
的返回值是什么?
答案 0 :(得分:0)
您可以使用getpass.getpass提示用户输入密码。但是请注意,getpass
模块不会为Unix密码提示显示星号。
对于问题的第二部分-sys.stdin.read(1)
返回\n
或\r
作为Enter输入,这取决于您使用的终端。
最后,我举了一个示例,说明如何使用您的函数读取直到CR或LF:
while True:', '\n']: break
ch = getch()
if ch in ['\r', '\n']: break
sys.stdout.flush()
如果您甚至需要为unix显示星号,就是这样。
答案 1 :(得分:0)
为了更安全地从用户读取密码,请检出getpass
模块。
它可以简单地导入和使用,如下所示。但是请记住,它不会显示星号。
import getpass
password = getpass.getpass('Your message')
sys.stdin.read(1)
的返回值完全取决于您使用的控制台。