最近在用Python 3.2.3,想实现输入密码时回显*号,在网上查找了一下,这方面的资料相当的少,找到方法有几种
1.getpass.getpass() ,缺点是不回显任何内容,不知道的还以为没有输入进去呢,当然这是unix风格
2. unix系列下使用termios:windows下不好用,模块找不到
3.msvcrt.getch() : 在windows下要用msvcrt代替termios:
import msvcrt, sys
def pwd_input():
chars = []
while True:
newChar = msvcrt.getch()
if newChar in '\r\n': # 如果是换行,则输入结束
print ''
break
elif newChar == '\b': # 如果是退格,则删除末尾一位
if chars:
del chars[-1]
sys.stdout.write('\b \b') # 删除一个星号
else:
chars.append(newChar)
sys.stdout.write('*') # 显示为星号
print ''.join(chars)
pwd = pwd_input()
print pwd
以上方法的最大的缺点是sys.stdout.write('\b \b')只有在输入回车时才会生效,也就是看不到星号被删掉的效果,还是不满足要求
并且要注意msvcrt.getch()应在控制台下使用,如果在IDLE等IDE环境下运行,由于IDE模拟的控制台不是标准的控制台,msvcrt.getch()不会得到正确的结果。
下面是我对第三种方法的修正,基本满足了输入密码,可以实时按回退键删掉星号。原理请看源代码的注释:
import msvcrt
def 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) )
print("请输入密码:")
pwd = pwd_input()
print("\n密码是:{0}".format(pwd))
input("按回车键退出")
分享到:
相关推荐
Python3.x和Python2.x的区别
喜欢python的人都知道python2.x与python3.x的有着很大的区别。如果你原来经常使用python2.x,已经习惯了它的话,你会不适应python3.x的。我就是其中一个不适应者,在后来使用python3.x的过程中,结合python3.1.3的...
主要介绍了Python实现控制台输入密码的方法,实例对比分析了几种输入密码的方法,具有一定参考借鉴价值,需要的朋友可以参考下
python2和3两个大版本的区别
在安装pyhton扩展时,会报错:unable to find vcvarsall.bat。 是因为扩展使用C/C++编写,缺少编译需要的环境,而python2.x和3.x使用的版本也不一样,此资源提供了两个都需要的,可以根据自己的python版本选择使用。
python控制台输入密码,控制台输入密码变成`*`,支持删除等操作.
(续3)Python3.x+Pyqt5实现主窗体里的工具栏,且工具栏里可以同时显示图标和文字。
下面看下python2.x和python3.x的区别 1.大环境不同 python2.x:源码重复,不规范 python3.x:整合源码,更清晰优美简单 2.默认编码不同 python2.x:默认编码ASCII编码 python3.x:默认编码UTF-8 3.python3...
Python3.x 教程,自己一页一页阅读并复制的
本文档是个人整理的Python3.x教程,内容从初级到高级编程。本文档和Python2.x使用,帮助学习者快速上手Python。值得你拥有
Python3.x和Python2.x的区别.pdf
Python2.x和3.x的版本差异问题,这个差异真不是一般的大,从一个简单的print到核心库的改进都牵扯到了很多,现在总结了一些主要的差异点。
下载DjangoUeditor,发现不支持Python3.x,经过修改,在Python2.X(测试环境为Python2.6.6 + django-1.6.5 和Python2.7.8 + django-1.6.5)和Python3.X(测试环境为Python3.4.1 + django-1.6.5)下完美支持
Python3.X_HTMLTestRunner亲测可用,附说明
pycharm配置anaconda3,同时调用anaconda3中的python2.x和python3.x
python项目——五子棋(控制台版).zip python项目——五子棋(控制台版).zip python项目——五子棋(控制台版).zip python项目——五子棋(控制台版).zip python项目——五子棋(控制台版).zip python项目——...
针对python3.x版本的MySQL数据库操作.
Python3.x+Pyqt5实现主窗体(QMainWindow类)里的分割器QSplitter动态载入子窗体(QWidget类),还实现了导航栏抽屉效果。
openopc for python3.x 库