CUIなツールでのパスワード読み込みについてのメモ

はてなグラフの体重、体脂肪率を早速貼り付けてみたbonlifeです。夕食を早めに食べただけで体重が800gも減っているように見えるマジック!一喜一憂せずにノンビリと体を引き締めたいところです。(お腹がぷにぷにしてます…。)
さてさて、「標準入力の読み込みについてのメモ」の続きです。パスワードを入力する際、そのまま入力してる様子が見えちゃうとソーシャルなんちゃらとかアレなので、* にするなり表示させない工夫をしたい。そういうことをやってくれる小人がgetpassですって。

import getpass

user_name = raw_input('user_name : ')
password = getpass.getpass('password  : ')

print 'user_name is ' + user_name
print 'password is ' + password

パスワードは表示されません。予定通りの動作です。

user_name : bonlife
password  :
user_name is bonlife
password is aaa

パスワードを2回入力させて確認したい時には、while 1: とかでループを回して、処理したら良いはず。以下のようなイメージ。(もっと上手いやり方ありそうですが、とりあえず。)

import getpass

user_name = raw_input('enter user_name   : ')
while 1:
    password = getpass.getpass('enter password    : ')
    password2 = getpass.getpass('re-enter password : ')
    if password != '' and password == password2:
        break
        # break or call some functions here...
    else:
        print 'WAR : Incorrect password. Please try again.'

print 'user_name is ' + user_name
print 'password is ' + password

異なるパスワードを入力すると、メッセージ表示後、再度入力を促されます。

enter user_name   : bonlife
enter password    :
re-enter password :
WAR : Incorrect password. Please try again.
enter password    :
re-enter password :
user_name is bonlife
password is aaa

メッセージを表示する際、warningsモジュールのwarnで警告にした方が良いのかなぁ、と思いましたが、とりあえず普通にprintで。こんな感じでボチボチ勉強してみます。あら、こんな日記書いてるうちに遅刻ですよ。