最近要不是客户提了1个很繁琐的需求,恐怕就没有这篇文章了。
原先编写的终端获取密码的方法是使用linux下的getpass函数来实现,该函数原型如下:
#include <unistd.h>
char *getpass(const char *prompt);
该函数有个不好的地方就是输入的密码不回显,根本不知道输入了多少位的密码。
于是提出了希望可以将输入的密码回显为密文的形式,比如1个星号或圆心。
不得不说这是1个很让人难以拒绝的要求,只好硬着头脑看下能不能实现。
另外,还要求能够支持跨平台,需要支持Windows和Linux主流操作系统。
后来发现,对于Windows可以利用conio.h
头的_getch
函数,而不是getch
函数,因为后者在Visual Studio 2015中已经淘汰了,不建议使用了。为了安全考虑,于是选择了函数。
对于Linux,可以考虑使用termios.h
下的termios结构体来完成对应的操作,该结构体已经是上个世界80年代的产物了,基本属于很久的技术了。
最终将写好的程序集成到Python 3中,可以使用下面的方式进行安装:
pip3 install terminal-password
安装完成后,使用下面的方式进行调用:
import terminal_password as password
b = password.get_password(u'\u2605')
函数get_password
接收1个Unicode的字符,用于表示对应输出的符号。这里我们的五角星★的Unicode码是\u2605
,当然也可以根据需要选择需要的符号。默认情况使用的是星号*
进行输出。
下面是在Windows下的实际示例:
可以看到整个过程丝般顺畅,无论是按下BackSpace键还是输入密码的过程。
这样,总算让客户满意了。