@@ -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