【问题标题】:getpass.getpass() function in Python not working?Python 中的 getpass.getpass() 函数不起作用?
【发布时间】:2019-01-04 16:29:56
【问题描述】:

在 Windows 7 上运行并使用 PyCharm 2016.2.3,如果这很重要的话。

无论如何,我正在尝试编写一个向收件人发送电子邮件的程序,但我希望控制台提示输入密码才能登录。

听说getpass.getpass()可以用来隐藏输入。

这是我的代码:

import smtplib
import getpass

import sys

print('Starting...')

SERVER = "localhost"
FROM = "my@email.com"

while True:
    password = getpass.getpass()
    try:
        smtpObj = smtplib.SMTP(SERVER)
        smtpObj.login(FROM, password)
        break
    except smtplib.SMTPAuthenticationError:
        print("Wrong Username/Password.")
    except ConnectionRefusedError:
        print("Connection refused.")
        sys.exit()

TO = ["your@email.com"] 
SUBJECT = "Hello!"
TEXT = "msg text"

message = """\
From: %s
To: %s
Subject: %s

%s
""" % (FROM, ", ".join(TO), SUBJECT, TEXT)

smtpObj.sendmail(FROM, TO, message)
smtpObj.close()
print("Successfully sent email")

但是当我运行我的代码时,输​​出如下:

 Starting...
 /Nothing else appears/

我知道getpass() 的默认提示是'Password:',但即使我将提示字符串传递给它,我也会得到相同的结果。

有什么建议吗?

编辑:代码在打印字符串后继续无限期运行,但没有其他内容出现,也没有发送电子邮件。

【问题讨论】:

  • 您实际上是从 Windows 控制台启动您的 python 脚本吗?
  • 做到了。现在我觉得自己像个白痴。

标签: python


【解决方案1】:

对于 PyCharm 2018.3 转到“编辑配置”,然后选择“在输出控制台中模拟终端”。

Answer provided by Abhyudaya Sharma

【讨论】:

  • 无论是否选中此选项,都为我进行了调试。唯一的区别是没有检查它,它实际上显示了我输入的密码。顺便说一句,我正在使用带有 Python 插件的 Intellij。
【解决方案2】:

您遇到的问题是您通过 PyCharm 启动它,它有自己的控制台(而不是 getpass 使用的控制台)

通过命令提示符运行代码应该可以工作

【讨论】:

  • 是否有可以在 PyCharm 控制台上运行的 getpass() 等效项?
  • 我不知道。在 PyCharm 中以调试模式运行脚本也可以正常工作(它在我的机器上工作,但我看到报告并非总是如此)
猜你喜欢
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 2015-04-19
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多