【问题标题】:Python getpass.getpass() function call hangsPython getpass.getpass() 函数调用挂起
【发布时间】: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


    【解决方案1】:

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

    winpty python fileToExecute.py
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我刚刚对此进行了测试 - 它并非在所有情况下都有效。例如:在 Windows 中的 PyCharm 上点击运行会导致终端挂起,但是如果我调试它工作。使用此修复程序会拒绝这两个实例。
      • 它确实适用于我尝试过的所有其他用例。所以我仍然在使用它!
      • @GrantCurell 感谢您的反馈。您对可与 PyCharm 一起使用的修复或替代代码有什么建议吗?知道为什么 PyCharm 会挂起吗?
      • 我真的不知道 - 我实际上不确定它为什么会这样做。我玩了一会儿,但老实说,它只发生在 PyCharm 中。我不确定它的调试终端有什么区别,但是在常规的 Windows 命令行上我没有任何问题,这是使用我的代码的人无论如何都会看到的,所以我离开了。
      【解决方案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 并解决了这个问题。

      【讨论】:

        【解决方案4】:

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

        os.system("stty -echo")
        password = input('Enter Password:')
        os.system("stty echo")
        print("")
        

        【讨论】:

          【解决方案5】:

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

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

          我的设置是运行 Python 3.7.7 的 Anaconda

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-06-16
            • 2015-07-04
            • 2020-11-07
            • 2020-04-13
            • 1970-01-01
            • 2021-04-09
            • 1970-01-01
            相关资源
            最近更新 更多