Web+DB PRESS vol.39
ここ最近、毎月購入して通勤電車で読んでます。DBとかあまりいじったことないので、ものすごく勉強になります。あと、ウォータフォーラーな僕にはアジャイラーのみなさんとの接点っぽい位置づけでためになること満載です。
通勤が長くなるのも、多少はメリットがあります。無理やり読書の時間にできるので。
バッチ処理のお話もありました。結構Webサーバのバックエンドでガリガリとバッチ処理とかされてるのですね。なかなか興味深い。
通勤が長くなるのも、多少はメリットがあります。無理やり読書の時間にできるので。
バッチ処理のお話もありました。結構Webサーバのバックエンドでガリガリとバッチ処理とかされてるのですね。なかなか興味深い。
話はとんで。WEB+DB PRESS Vol.39の購入ついでに、Perl Hacks ―プロが教えるテクニック & ツール101選も購入しました。Pythonにも応用できそうなことが多かったので、勉強になると思ったので。いまのPythonにはできなくて、ちょっとがんばれば僕にも実践できることをPythonで実践できればと思ってます。
では、さっそくひとつ。Hack#14の「遮蔽装置の実現」をPythonで。
Pythonには、パスワード入力の汎用モジュール(といっても、2つしかメソッドないですが。。。)である「getpass」があるのですが、こいつはエコーバックを完全になくしてしまいます。入力したら、入力文字数分だけ"*"を表示したい!!
というわけで、getpassモジュールを参考に、lgetpassを作成してみました。
import sys import termios def lgetpass(prompt='Password: ', echo=None): fd = sys.stdin.fileno() passwd = "" old = termios.tcgetattr(fd) # a copy to save new = old[:] new[3] = new[3] & ~termios.ECHO # 3 == 'lflags' new[3] = new[3] & ~termios.ICANON try: termios.tcsetattr(fd, termios.TCSANOW, new) sys.stdout.write(prompt) while (1): s = sys.stdin.read(1) if s != '\r' and s != '\n' and s != '\r\n': sys.stdout.write(echo) passwd += s else: break #passwd = raw_input(prompt) finally: termios.tcsetattr(fd, termios.TCSADRAIN, old) sys.stdout.write('\n') return passwd if __name__ == '__main__': print lgetpass(echo='*')
みたいな感じでしょうか。1文字読み込みのところとかは、素人くさいくさいw(あんまりHackerレベルのコードというのがよくわかっていないのですが、僕の中ではmapとかlambdaとかガンガンしようしてるイメージw)
でも、僕の今のPythonのレベルはこんな感じです。あ、実行結果は以下のとおり。
% python getp.py [~/py] Password: ********** syobosyobo
昨日はPython クックブック 第2版も購入して、"Hack漬け"です。("お茶漬け"みたい。)
書籍を購入しまくりです。ガシガシ勉強します。