| :mod:`!getpass` --- Portable password input | |
| =========================================== | |
| .. module:: getpass | |
| :synopsis: Portable reading of passwords and retrieval of the userid. | |
| **Source code:** :source:`Lib/getpass.py` | |
| -------------- | |
| .. include:: ../includes/wasm-notavail.rst | |
| The :mod:`!getpass` module provides two functions: | |
| .. function:: getpass(prompt='Password: ', stream=None, *, echo_char=None) | |
| Prompt the user for a password without echoing. The user is prompted using | |
| the string *prompt*, which defaults to ``'Password: '``. On Unix, the | |
| prompt is written to the file-like object *stream* using the replace error | |
| handler if needed. *stream* defaults to the controlling terminal | |
| (:file:`/dev/tty`) or if that is unavailable to :data:`sys.stderr` (this | |
| argument is ignored on Windows). | |
| The *echo_char* argument controls how user input is displayed while typing. | |
| If *echo_char* is ``None`` (default), input remains hidden. Otherwise, | |
| *echo_char* must be a single printable ASCII character and each | |
| typed character is replaced by it. For example, ``echo_char='*'`` will | |
| display asterisks instead of the actual input. | |
| If echo-free input is unavailable, :func:`getpass` falls back to printing | |
| a warning message to *stream* and reading from :data:`sys.stdin` and | |
| issuing a :exc:`GetPassWarning`. | |
| .. note:: | |
| If you call :func:`getpass` from within IDLE, the input may be done in the | |
| terminal you launched IDLE from rather than the idle window itself. | |
| .. note:: | |
| On Unix systems, when *echo_char* is set, the terminal will be | |
| configured to operate in | |
| :manpage:`noncanonical mode <termios(3)#Canonical_and_noncanonical_mode>`. | |
| Common terminal control characters are supported: | |
| * :kbd:`Ctrl+A` - Move cursor to beginning of line | |
| * :kbd:`Ctrl+E` - Move cursor to end of line | |
| * :kbd:`Ctrl+K` - Kill (delete) from cursor to end of line | |
| * :kbd:`Ctrl+U` - Kill (delete) entire line | |
| * :kbd:`Ctrl+W` - Erase previous word | |
| * :kbd:`Ctrl+V` - Insert next character literally (quote) | |
| * :kbd:`Backspace`/:kbd:`DEL` - Delete character before cursor | |
| These shortcuts work by reading the terminal's configured control | |
| character mappings from termios settings. | |
| .. versionchanged:: 3.14 | |
| Added the *echo_char* parameter for keyboard feedback. | |
| .. versionchanged:: 3.15 | |
| When using non-empty *echo_char* on Unix, keyboard shortcuts (including | |
| cursor movement and line editing) are now properly handled using the | |
| terminal's control character configuration. | |
| .. exception:: GetPassWarning | |
| A :exc:`UserWarning` subclass issued when password input may be echoed. | |
| .. function:: getuser() | |
| Return the "login name" of the user. | |
| This function checks the environment variables :envvar:`LOGNAME`, | |
| :envvar:`USER`, :envvar:`!LNAME` and :envvar:`USERNAME`, in order, and | |
| returns the value of the first one which is set to a non-empty string. If | |
| none are set, the login name from the password database is returned on | |
| systems which support the :mod:`pwd` module, otherwise, an :exc:`OSError` | |
| is raised. | |
| In general, this function should be preferred over :func:`os.getlogin`. | |
| .. versionchanged:: 3.13 | |
| Previously, various exceptions beyond just :exc:`OSError` were raised. |