Python实现星号遮掩的密码输入

代码:


def pwd_input(msg = ''):
	import msvcrt, sys

	if msg != '':
		sys.stdout.write(msg)
	chars = []
	while True:
		newChar = msvcrt.getch()
		if newChar in '\3\r\n': # 如果是换行,Ctrl+C,则输入结束
			print ''
			if newChar in '\3': # 如果是Ctrl+C,则将输入清空,返回空字符串
				chars = []
			break
		elif newChar == '\b': # 如果是退格,则删除末尾一位
			if chars:
				del chars[-1]
				sys.stdout.write('\b \b') # 左移一位,用空格抹掉星号,再退格
		else:
			chars.append(newChar)
			sys.stdout.write('*') # 显示为星号
	return ''.join(chars)

其中,参数msg代表输入的提示文字。

‘\3\r\n’ 含义是,如果输入是Ctrl+C,或者是回车符,则输入结束。因为操作系统的不同,对回车的编码方式有区别。

'\b \b' 含义是,\b是光标左移一位,相当于按了键盘上的左箭头,再用空格代替掉右侧的一位*号,再将光标移回一位。


注意:此代码用了底层的I/O模块,甚至接管了键盘中断。


改编自:http://www.cnblogs.com/lovebread/archive/2010/11/09/1872774.html

你可能感兴趣的:(Python)