控制台输入密码passwod的方法"/>
Python:控制台输入密码passwod的方法
目录
- input
- getpass
- termios
- msvcrt
input
print(input("please input: "))
$ python3 demo.py
please input: 123456
123456
缺点:不安全
getpass
import getpassprint(getpass.getpass("please input: "))
$ python3 demo.py
please input:
123456
缺点:看不到输入的位数
termios
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) finally: termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) return chdef getpass(maskchar = "*"): password = "" while True: ch = getch() if ch == "\r" or ch == "\n": print return password elif ch == "\b" or ord(ch) == 127: if len(password) > 0: sys.stdout.write("\b \b") password = password[:-1] else: if maskchar != None: sys.stdout.write(maskchar) password += ch if __name__ == "__main__": print ("Enter your password:",)password = getpass("*") print ("your password is %s" %password)
$ python3 demo.py
Enter your password:
******
your password is 123456
缺点:该方法仅在Linux上使用
msvcrt
import msvcrt,sysdef pwd_input(): chars = [] while True: try: newChar = msvcrt.getch().decode(encoding="utf-8") except: return input("你很可能不是在cmd命令行下运行,密码输入将不能隐藏:") if newChar in '\r\n': # 如果是换行,则输入结束 break elif newChar == '\b': # 如果是退格,则删除密码末尾一位并且删除一个星号 if chars: del chars[-1] msvcrt.putch('\b'.encode(encoding='utf-8')) # 光标回退一格 msvcrt.putch( ' '.encode(encoding='utf-8')) # 输出一个空格覆盖原来的星号 msvcrt.putch('\b'.encode(encoding='utf-8')) # 光标回退一格准备接受新的输入 else: chars.append(newChar) msvcrt.putch('*'.encode(encoding='utf-8')) # 显示为星号 return (''.join(chars) ) if __name__ == "__main__": print("Please input your password:")pwd = pwd_input() print("\nyour password is:{0}".format(pwd))sys.exit()
缺点:仅在Windows上使用
参考
- Python之控制台输入密码的方法
更多推荐
Python:控制台输入密码passwod的方法
发布评论