我试图得到一个提示,要求我输入密码,但是当我尝试调用它时,getpass.getpass()
它只是冻结了。我在 Canopy 上使用 Python 2.7 在 Windows 7 64 位上运行。
import sys
import getpass
p = getpass.getpass()
print p
我试图得到一个提示,要求我输入密码,但是当我尝试调用它时,getpass.getpass()
它只是冻结了。我在 Canopy 上使用 Python 2.7 在 Windows 7 64 位上运行。
import sys
import getpass
p = getpass.getpass()
print p
Python“有效地冻结,因为它无法接收来自标准输入的输入”是正确的,但是,对于 Windows,您可以在命令前加上winpty
. 然后在启动时可以正确输入密码,例如:
winpty python fileToExecute.py
winpty提供了一个类似于 Unix pty-master 的接口,它也可以从 Windows 终端进行通信。
Python“有效地冻结,因为它无法接收来自标准输入的输入”。请参阅https://support.enthought.com/entries/22157050-Canopy-Python-prompt-QtConsole-Can-t-run-getpass-or-interactive-OS-shell-commands-or-Windows-process
解决方法是使用不同的解释器。我切换到 IDLE 并解决了这个问题。
遇到与 getpass (mingw64) 相同的问题并找到了这个简单的解决方案。
os.system("stty -echo")
password = input('Enter Password:')
os.system("stty echo")
print("")
getpass()
如果 python 无法从标准输入正确读取,将冻结。这可能发生在某些 Windows 终端上,例如使用 git bash。您可以使用该sys
模块来检测是否会发生这种情况,以避免挂起:
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()
# ...
我还在 Mac 上使用 Jupyter Lab 和 Jupyter Notebook 进行了此操作。对我来说,这个问题是由变量名引起的。
命名变量PG_REMOTEPASSWORD
会导致挂起,但PG_PASSWORD
&PG_ABCPass
没有。我不知道为什么这是一个问题,文档中没有关于可以调用变量的限制。
我的设置是运行 Python 3.7.7 的 Anaconda