Python Get Password
I just discovered the getpass class in Python (see [1]). And again I am falling in love - the saying that Python comes with batteries included is indeed true.
This silly test-program gets a password twice and compares the results, if there is a match the password is printed on screen. If there is a mismatch the user is informed of this (and the passwords are displayed).
Features
GetPass comes with two functions of particular interest: getpass and getuser. By looking a bit under the hood we find more that that (to find out what it means is left as an excercise [:)]-|--< ):
>python
Python 2.5.1 (r251:54863, May 2 2007, 16:56:35)
[GCC 4.1.2 (Ubuntu 4.1.2-0ubuntu4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import getpass
>>> dir(getpass)
[<snip>, 'default_getpass', 'getpass', 'getuser', <snip>, 'unix_getpass', 'win_getpass']
>>> getpass.unix_getpass()
Password:
'foo'
>>> getpass.win_getpass()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/getpass.py", line 50, in win_getpass
import msvcrt
ImportError: No module named msvcrt
>>> getpass.default_getpass()
Warning: Problem with getpass. Passwords may be echoed.
Password: foobar
'foobar'
Example of a small program
This little program illustrates the method getpass (that is similar to raw_input but it does not echo the keypunches) and the method getuser (that gets the login name).
import getpass
print "WARNING: do not provide a real password!"
print "%s, enter your " % getpass.getuser(),
pw1 = getpass.getpass()
print "Confirm ",
pw2 = getpass.getpass()
if pw1 == pw2:
print 'Your password was "%s".' % pw1
else:
print 'BAD: you provided different passwords "%s" and "%s".' % (pw1, pw2)
Example of Usage
First we provide the same password twice:
>python get_password.py WARNING: do not provide a real password! per, enter your Password: Confirm Password: Your password was "fnord".
And now we provide different passwords:
>python get_password.py WARNING: do not provide a real password! per, enter your Password: Confirm Password: BAD: you provided different passwords "xyzzy" and "LiBeBCNOFNe".
Conclusions
No more need to pass the password in as a command line argument or implement an ugly hacked version of raw_input - thank god (no: thank Guido!).
This page belongs in Kategori Programmering