@@ -34,7 +34,7 @@ def unix_getpass(prompt='Password: ', stream=None, *, echochar=None):
3434 stream: A writable file object to display the prompt. Defaults to
3535 the tty. If no tty is available defaults to sys.stderr.
3636 echochar: A string used to mask input (e.g., '*'). If None, input is
37- hidden.
37+ hidden.
3838 Returns:
3939 The seKr3t input.
4040 Raises:
@@ -83,25 +83,7 @@ def unix_getpass(prompt='Password: ', stream=None, *, echochar=None):
8383 stream .write ('\n ' )
8484 return passwd
8585
86- passwd = ""
87- stream .write (prompt )
88- stream .flush ()
89- while True :
90- char = input .read (1 )
91- if char == '\n ' or char == '\r ' :
92- break
93- if char == '\x03 ' :
94- raise KeyboardInterrupt
95- if char == '\x7f ' or char == '\b ' :
96- if echochar and passwd :
97- stream .write ("\b \b " * len (echochar ))
98- stream .flush ()
99- passwd = passwd [:- 1 ]
100- else :
101- passwd += char
102- if echochar :
103- stream .write (echochar )
104- stream .flush ()
86+ passwd = _echochar_input (prompt , stream , input , echochar )
10587 finally :
10688 termios .tcsetattr (fd , tcsetattr_flags , old )
10789 stream .flush () # issue7208
@@ -186,6 +168,33 @@ def _raw_input(prompt="", stream=None, input=None):
186168 return line
187169
188170
171+ def _echochar_input (prompt = "" , stream = None , input = None , echochar = "" ):
172+ if not stream :
173+ stream = sys .stderr
174+ if not input :
175+ input = sys .stdin
176+ prompt = str (prompt )
177+ stream .write (prompt )
178+ stream .flush ()
179+ passwd = ""
180+ while True :
181+ char = input .read (1 )
182+ if char == '\n ' or char == '\r ' :
183+ break
184+ if char == '\x03 ' :
185+ raise KeyboardInterrupt
186+ if char == '\x7f ' or char == '\b ' :
187+ if passwd :
188+ stream .write ("\b \b " * len (echochar ))
189+ stream .flush ()
190+ passwd = passwd [:- 1 ]
191+ else :
192+ passwd += char
193+ stream .write (echochar )
194+ stream .flush ()
195+ return passwd
196+
197+
189198def getuser ():
190199 """Get the username from the environment or password database.
191200
0 commit comments