Python getpass.getpass()函数调用挂起

时间:2014-07-03 03:15:55

标签: python-2.7 hang getpasswd

我正在尝试获取要求输入密码的提示,但当我尝试拨打getpass.getpass()时,它就会冻结。我在Canopy上使用Python 2.7在Windows 7 64位上运行。

import sys
import getpass

p = getpass.getpass()
print p

5 个答案:

答案 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)

如果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()
    # ...

答案 4 :(得分:0)

我在Jupyter Lab和Jupyter Notebook上的Mac上也有此功能。对我来说,问题是由变量名引起的。

给变量PG_REMOTEPASSWORD命名会导致挂起,但PG_PASSWORDPG_ABCPass不会挂起。我不知道为什么会这样,在文档中没有关于变量调用限制的任何信息。

我的设置是运行Python 3.7.7的Anaconda