我想在 Windows 的 IDLE 终端中输入密码而没有回显。
通常可以使用函数 getpass.getpass() 在 python 中输入密码,但在 IDLE 中出现以下警告消息:
GetPassWarning: Can not control echo on the terminal.
Warning: Password input may be echoed.
我发现,这是因为 IDLE 用不同的对象替换了 sys.stdin:
if sys.stdin is not sys.__stdin__:
return fallback_getpass(prompt, stream)
但是,我找不到解决方案。有人有答案或其他方法可以在没有回声的情况下将密码输入 IDLE 终端吗?
最佳答案
作为对 IDLE 内部结构有些熟悉的 IDLE 维护者,我认为在不对 IDLE 代码进行重大更改的情况下,不可能抑制字符显示,但不能以其他方式更改响应 input('prompt')
的行为。
但即使这对于 getpass.getpass
来说也是不够的,因为它调用 unix_getpass
、 win_getpass
或 default_getpass
之一,而前两个使用 system_specific 绕过 stdin 的低级函数。
在设计意图方面:IDLE,顾名思义,是一个程序开发环境。开发的程序通常,有时必须直接由 Python 执行,无需经过 IDLE。 Python 通常连接到终端窗口运行。 IDLE 的 Shell 基于 tkinter Text 小部件,它是一个多行编辑器,而不是终端。这就是为什么人们可以输入、调用和编辑完整的多行语句而不是一次只能输入一行的原因。
关于python-3.x - 在 IDLE 中关闭 getpass.getpass() 的回显,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43142132/