2013-07-08 3 views
1

Как предотвратить эхо от ввода?Есть ли простой способ предотвратить эхо от ввода?

Попробовали «getpass()», но не повезло.

В Windows IDLE, он не работает

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32 
Type "copyright", "credits" or "license()" for more information. 
>>> import getpass 
>>> p = getpass.getpass(prompt="Input: ") 
Warning: Password input may be echoed. 
Input: abc <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< It still echos.. 

На терминале Windows, он работает

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (In 
tel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import getpass 
>>> p = getpass.getpass(prompt="Input: ") 
Input: 
>>> 

Есть ли простой способ предотвратить эхо от входа?

+3

Как Windows и терминал на Windows отличаются? – squiguy

+2

Я считаю, что один - это IDLE, а другой - Terminal. –

+0

Я думаю, что вопрос нуждается в некотором разъяснении, если это 'IDLE', его следует хотя бы упомянуть в вопросе. –

ответ

3

Я предполагаю, что ваш первый пример есть в IDLE.

От getpass.win_getpass():

if sys.stdin is not sys.__stdin__: 
    return fallback_getpass(prompt, stream) 

IDLE заменяет sys.stdin с другим объектом. getpass обнаруживает, что кто-то обернул stdin и вышел из строя по соображениям безопасности.

http://bugs.python.org/issue9290

+0

Есть ли обходной путь? –

+0

win_getpass использует функцию getch(), но он не может работать с IDLE env. Так что эхо не может быть отключено в IDLE. –

+1

IDLE - это среда разработки Обходной путь заключается не в том, чтобы запускать защищенные приложения в IDLE на производстве. Я имею в виду, что любой, кто мог бы читать локальное эхо, мог прорваться в интерпретатор и пройти через переменные в модуле, пока не найдет пароль! – llb

Смежные вопросы