pexpectのターミナルサイズを変更する

pythonのpexpectを使っていて、ターミナルのサイズがおかしくなっていることに気づいたのでその備忘。
どうやらpexpcetでは、指定が無いとターミナルのサイズを「24,80」にしてしまうようだ(迷惑な…)。

で、これだとちょっと困るので、以下の例のようにcursesで現在のターミナルサイズを取得させて、pexpectのsetwinsizeでターミナルウィンドウのサイズを修正させることにした。

#! /usr/bin/python
# -*- coding: utf-8 -*-
import pexpect
import os
import curses

# ターミナルサイズを取得
curses.setupterm()
term_lines = int(curses.tigetnum("lines"))
term_cols = int(curses.tigetnum("cols"))
print term_lines,term_cols

# pexpectを実行
foo = pexpect.spawn('bash')
foo.setwinsize(term_lines,term_cols)

# pexpectのターミナルサイズを取得
foo.expect(['$','#'])
foo.sendline('stty size')

foo.interact()

n-mbp2011:~ XXXXX$ stty size
30 109
n-mbp2011:~ XXXXX$
n-mbp2011:~ XXXXX$ cat script/test.py
#! /usr/bin/python
# -*- coding: utf-8 -*-
import pexpect
import os
import curses

# ターミナルサイズを取得
curses.setupterm()
term_lines = int(curses.tigetnum("lines"))
term_cols  = int(curses.tigetnum("cols"))
print term_lines,term_cols

# pexpectを実行
foo = pexpect.spawn('bash')
foo.setwinsize(term_lines,term_cols)

# pexpectのターミナルサイズを取得
foo.expect(['$','#'])
foo.sendline('stty size')

foo.interact()
n-mbp2011:~ XXXXX$ python script/test.py
30 109
bash-3.2$ stty size
30 109
bash-3.2$

とりあえずこれでターミナルサイズは修正できた。