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

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

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

*