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

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

スクリーンショット 2015-12-02 18.04.18.png

 

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

Sponsored Links

#! /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()

スクリーンショット 2015-12-02 18.40.24.png

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$

 

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

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。