我想在没有回声的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终端输入密码而没有回音?
答案 0 :(得分:3)
作为一个熟悉IDLE内部的IDLE维护者,我不相信可以抑制字符显示,但不会在没有对IDLE代码进行重大更改的情况下更改行为以响应input('prompt')
。
但即使这对getpass.getpass
来说还不够,因为它会调用unix_getpass
,win_getpass
或default_getpass
之一,前两个使用 system_specific 绕过标准输入的低级函数。
就设计意图而言:正如其名称所示,IDLE是一个程序开发环境。通常,有时必须由Python直接执行开发的程序,而不通过IDLE。 Python通常运行附加到终端窗口。 IDLE的Shell基于tkinter Text小部件,它是一个多行编辑器,而不是终端。这就是为什么人们可以输入,调用和编辑完整的多行语句,而不是一次只能输入一行。