求高手解救啊!pycharm下getpass.getpass()卡住不运行是什么问题

首先声明 下面这几行代码在命令行和eclipse下都能正常运行

import getpass
print "nihao1"
d = getpass.getpass()
print "nihao2"
print "d=", d
运行程序只是打印nihao1,然后可以不停的输入,就是不继续往下运行了,程序一直卡在这里,我是windows系统

然后我查看getpass模块的源码,发现getpass.getpass()的调用的是getpass.win_getpass(), 在这个方法中有一行c=msvcrt,getch().程序就是卡在这里不动了。
我能找到的问题就到这了,,接下来也不知道该怎么解决 ,求大神啊!!!

PS:
刚才又研究了一下源码,win_getpass()方法源码:里面的print语句是我自己调的时候加上的。
def win_getpass(prompt='Password: ', stream=None):
"""Prompt for password with echo off, using Windows getch()."""
print "hahaha i am in "
if sys.stdin is not sys.__stdin__:
print "if sys.stdin is not sys.__stdin__:"
return fallback_getpass(prompt, stream)
import msvcrt
print "import msvcrt"
for c in prompt:
print "for c in prompt:",c
msvcrt.putch(c)
pw = ""
while 1:
print "while 1:"
c = msvcrt.getch()
print "is here "
print c
if c == '\r' or c == '\n':
print "if c == '\r' or c == '\n':"
break
if c == '\003':
print "if c == '\003':"
raise KeyboardInterrupt
if c == '\b':
print "if c == '\b':"
pw = pw[:-1]
else:
print "else:"
pw = pw + c
msvcrt.putch('\r')
msvcrt.putch('\n')
print "pw:", pw
return pw


第四行有一句 if sys.stdin is not sys.__stdin__:
在windows下 pycharm中,运行源码时这一句返回的是false,所以程序跳过if语句继续往下执行了,这就进入了while 1:循环, 然后就卡在了刚开始说的c=msvcrt.getch()这里了。我把上面的那个if语句改了一下,把is not 改成 is了,竟然可以运行了。只是多了这么几行输出:
D:\Python27\lib\getpass.py:94: GetPassWarning: Can not control echo on the terminal.
return fallback_getpass(prompt, stream)
Warning: Password input may be echoed.

我只能做到这个程度了,至于为什么会是这样,为什么那个If语句在起作用,这和pycharm有什么关系,我都不知道了,所以求大神指点啊,说一下所以然,其中的原理是什么,应该怎么弄才能在pycharm中正常运行,因为源码在命令行和eclipse中都是正常的。
谢谢啦!!

4个回答

我也遇到了,在linux下都没问题,在pycharm换了3.x版本也不行,求大神指教,菜鸟一个

我遇到了一样的问题,是因为VScode可以用而Pycharm不行,我就对比着调试了一下。
最后也是卡在mscvrt.putwch()上面,发现这里VScode可以一个个char输出我们的prompt提示语,但PyCharm不行。
然后我就怀疑是不是PyCharm不能用putwch,果然是的。
腾讯云社区有关于PyCharm不能用putwch原因的讨论(详见https://cloud.tencent.com/developer/ask/140822 )结论应该是PyCharm控制台的问题,控制台在程序有机会读取之前消耗了输入。

我试过,用编辑器来运行就会出现问题,把代码直接双击打开就没有任何问题,能正常使用。

NanShan_ETNR
NanShan_ETNR 回复MrZ_ZW: 没错,我都因为这个被坑了无数回了
3 个月之前 回复
MrZ_ZW
MrZ_ZW 编辑器是可以的,部分编译器不行
4 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问