テキスト端末のサイズを調べる

25日間やって今さら気づいたのですが...
海外のプログラマやオタクのページ見てたら、「Twelve days of blah blah: Day n」とか言って12月13日から12日間だけやってる人もいるんですね。
なんだー、25日間も頑張んなくていいじゃんか。
いやもうadvent calendar面倒なので来年やるなら短い方にしますよ...
 
さて最後ですが、テキスト端末の行数と桁数を調べて返します。
端末のサイズによって出力を変えたい場合に使ったりします。
(WindowsでもCygwin等では動くようです)

import termios
import struct
import fcntl

import sys
fd = sys.stdin.fileno()
#import os
#fd = os.open(os.ctermid(), os.O_RDONLY)

arg = struct.pack('hhhh', 0, 0, 0, 0)
result = fcntl.ioctl(fd, termios.TIOCGWINSZ, arg)
row, col, _, _ = struct.unpack('hhhh', result)
print row, col
25 80

まとめ

唐突に一人advent calendarというものをやってみたわけですが...

今の仕事はRubyPHPが多くなっていますが、それでもPython 1.5というreモジュールもリスト内包表記もない時代から仕事をしているので、仕事のあちこちに「頭ひねって何とか作ったけど、今ならもっとスマートな書き方できるよ」ってPythonコードが残っています。社内レビューとか全然しなかった時代の俺俺コードなんかもたくさん...

さすがに今はバージョン管理してますけど昔は全然してなくて... 納品CDは会社のストレージにあるけど自分が過去に書いたコードを調べるために発掘するわけにもいかんし、昔書いたコードをうっすら残った記憶を頼りに書き起こしています。

まあ世の中Pythonはどんどん変わっていて、もうPython 3が当たり前になりつつあります。

今年はPython 3をネタにadvent calendarを書く人はいると思うので、自分としては中途半端にPython 3を論じるより、まずはPython 2で書き散らかした古い定番コードを整理しておこうと考えて、昔書き散らかしたPython自体の小技・裏技っぽいものを取り上げてみた次第です。

来年は、自分がPythonに触れてから2度目の蛇年ということで、趣味でも仕事でも少しバージョンを上げる努力をしていこうと企んでいます。