msvcrt模块实例——input()输入密码变成*

一、需求

        从控制台输入密码时,密码变成*

二、分析

        input()只能输入明文数据,无法实现变更输入数据成*。可通过msvcrt模块实现需求。

三、实现方式

"""方案二:将输入密码变成*号
msvcrt模块为Python提供许多直接与操作系统交互的方法,
getch()函数用于从控制台获取一个字符的输入
putch()函数用于将一个字符输出到控制台
"""
import msvcrt

# print(xx,flush=True),将内存中的数据直接显示在屏幕上
print('password: ', end='', flush=True)

# 以栈的形式存储输入的密码
li = []

while 1:
    ch = msvcrt.getch()
    #回车(enter)
    if ch == b'\r':
        msvcrt.putch(b'\n') # 相当于print()
        print('输入的密码是:%s' % b''.join(li).decode())
        break
    # 退格(backspace)
    elif ch == b'\x08':
        if li:
            li.pop()    # 将栈中最后进来的元素退栈
            msvcrt.putch(b'\b') # 输出一个退格(backspace),光标左移
            msvcrt.putch(b' ')  # 在光标位置输出空格
            msvcrt.putch(b'\b') # 输出空格后,光标再进行一次左移
    # #Esc    未生效
    # elif ch == b'\x1b':
    #     break
    else:
        li.append(ch)   # 将输入的字符入栈
        msvcrt.putch(b'*')  # 每入栈一个元素,将一个*字符输出到控制台

四、实现效果

五、简单实现密码隐藏操作

getpass模块实例——隐藏input()输入数据-CSDN博客

六、参考资料

python中flush=true_浅谈python print(xx, flush = True) 全网最清晰的解释-CSDN博客

Python中的msvcrt模块用法介绍_笔记大全_设计学院 (python100.com)

键盘按键与 ASCII 字符集对照表 (runoob.com)

python 常用转义字符对照表 键盘各键对应的ASCII码值_python转义字符表-CSDN博客

七、使用方法

        补充下这个代码的使用方法,msvcrt这个包有些特殊,提供的很多方法是直接与内存进行交互,在开发工具中可能会出现无法正常使用的情况,建议从CMD终端启动脚本。

方法一:在CMD终端输入“python python脚本路径”,我本地的路径如下所示

python D:\Project\Python\Python_PhaseTwo\day05\test.py

方法二:打开脚本所在文件夹,启动终端执行脚本

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值