Python中的getpass.getpass()函数不起作用?

时间:2016-10-12 20:30:36

标签: python

在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:',但即使我传递了一个提示字符串,我也会得到相同的结果。

有什么建议吗?

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

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

enter image description here

Answer provided by Abhyudaya Sharma