我正在尝试获取要求输入密码的提示,但当我尝试拨打getpass.getpass()
时,它就会冻结。我在Canopy上使用Python 2.7在Windows 7 64位上运行。
import sys
import getpass
p = getpass.getpass()
print p
答案 0 :(得分:3)
Python“有效冻结,因为它无法接收来自标准输入的输入”。见https://support.enthought.com/entries/22157050-Canopy-Python-prompt-QtConsole-Can-t-run-getpass-or-interactive-OS-shell-commands-or-Windows-process
修复方法是使用不同的解释器。我切换到IDLE并解决了问题。
答案 1 :(得分:1)
Python“有效冻结是因为它不能接收来自标准输入的输入”是正确的,但是,对于Windows,您可以在命令前加上winpty
。这样启动时就可以正确输入密码了:
winpty python fileToExecute.sh
winpty提供了与Unix pty-master相似的界面,使得也可以从Windows终端进行通信。
答案 2 :(得分:0)
使用getpass(mingw64)遇到相同的问题,并找到了this个简单的解决方案。
os.system("stty -echo")
password = input('Enter Password:')
os.system("stty echo")
print("")
答案 3 :(得分:0)
getpass()
将冻结。
这可能发生在一些Windows终端,例如使用git bash。
您可以将sys
模块用于detect if this will happen,以避免挂起:
import getpass
import sys
# ...
if not sys.stdin.isatty():
# notify user that they have a bad terminal
# perhaps if os.name == 'nt': , prompt them to use winpty?
return
else:
password = getpass.getpass()
# ...
答案 4 :(得分:0)
我在Jupyter Lab和Jupyter Notebook上的Mac上也有此功能。对我来说,问题是由变量名引起的。
给变量PG_REMOTEPASSWORD
命名会导致挂起,但PG_PASSWORD
和PG_ABCPass
不会挂起。我不知道为什么会这样,在文档中没有关于变量调用限制的任何信息。
我的设置是运行Python 3.7.7的Anaconda