【发布时间】:2014-07-03 03:15:55
【问题描述】:
我试图得到一个提示,要求我输入密码,但是当我尝试调用 getpass.getpass() 时,它只是冻结了。我在 Canopy 上使用 Python 2.7 在 Windows 7 64 位上运行。
import sys
import getpass
p = getpass.getpass()
print p
【问题讨论】:
标签: python-2.7 freeze getpasswd
我试图得到一个提示,要求我输入密码,但是当我尝试调用 getpass.getpass() 时,它只是冻结了。我在 Canopy 上使用 Python 2.7 在 Windows 7 64 位上运行。
import sys
import getpass
p = getpass.getpass()
print p
【问题讨论】:
标签: python-2.7 freeze getpasswd
Python“有效地冻结,因为它无法接收来自标准输入的输入”是正确的,但是,对于 Windows,您可以在命令前加上 winpty。然后在启动时可以正确输入密码,如:
winpty python fileToExecute.py
winpty 提供了一个类似于 Unix pty-master 的接口,也可以从 Windows 终端进行通信。
【讨论】:
如果 python 无法从标准输入正确读取,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()
# ...
【讨论】:
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) 相同的问题并找到 this 简单解决方案。
os.system("stty -echo")
password = input('Enter Password:')
os.system("stty echo")
print("")
【讨论】:
我在 Mac 上也使用了 Jupyter Lab 和 Jupyter Notebook。对我来说,这个问题是由变量名引起的。
命名变量 PG_REMOTEPASSWORD 导致挂起,但 PG_PASSWORD 和 PG_ABCPass 没有。我不知道为什么这是个问题,文档中没有关于可以调用什么变量的限制。
我的设置是运行 Python 3.7.7 的 Anaconda
【讨论】: