7

我试图得到一个提示,要求我输入密码,但是当我尝试调用它时,getpass.getpass()它只是冻结了。我在 Canopy 上使用 Python 2.7 在 Windows 7 64 位上运行。

import sys
import getpass

p = getpass.getpass()
print p
4

5 回答 5

6

Python“有效地冻结,因为它无法接收来自标准输入的输入”是正确的,但是,对于 Windows,您可以在命令前加上winpty. 然后在启动时可以正确输入密码,例如:

winpty python fileToExecute.py

winpty提供了一个类似于 Unix pty-master 的接口,它也可以从 Windows 终端进行通信。

于 2019-01-31T11:31:28.277 回答
5

Python“有效地冻结,因为它无法接收来自标准输入的输入”。请参阅https://support.enthought.com/entries/22157050-Canopy-Python-prompt-QtConsole-Can-t-run-getpass-or-interactive-OS-shell-commands-or-Windows-process

解决方法是使用不同的解释器。我切换到 IDLE 并解决了这个问题。

于 2014-07-03T04:38:00.060 回答
1

遇到与 getpass (mingw64) 相同的问题并找到了这个简单的解决方案。

os.system("stty -echo")
password = input('Enter Password:')
os.system("stty echo")
print("")
于 2019-07-14T05:17:44.983 回答
1

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()
    # ...
于 2019-10-07T21:07:06.760 回答
0

我还在 Mac 上使用 Jupyter Lab 和 Jupyter Notebook 进行了此操作。对我来说,这个问题是由变量名引起的。

命名变量PG_REMOTEPASSWORD会导致挂起,但PG_PASSWORD&PG_ABCPass没有。我不知道为什么这是一个问题,文档中没有关于可以调用变量的限制。

我的设置是运行 Python 3.7.7 的 Anaconda

于 2020-11-13T10:08:47.617 回答