在 IDLE 中关闭 getpass.getpass() 的回显

Turn off echo of getpass.getpass() in IDLE

我想在 Windows 中向 IDLE 终端输入密码,但没有回显。

正常情况下,python 可以使用函数 getpass.getpass() 输入密码,但在 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_getpasswin_getpassdefault_getpass 之一,而前两个使用 system_specific 绕过标准输入的低级函数。

在设计意图上:IDLE,顾名思义,就是一个程序开发环境。开发的程序通常,有时必须由 Python 直接执行,而无需通过 IDLE。 Python 通常连接到终端 window 运行。 IDLE 的 Shell 基于 tkinter 文本小部件,它是一个多行编辑器,而不是终端。这就是为什么可以输入、调用和编辑完整的多行语句而不是一次只能输入一行的原因。