ttyをPythonで扱う
ダウンロードの進行表示ってどうやってんのかねと思った次第。
例えばダウンロードの表示をコンソールでやるとして流れていかないで同じ行で表示させているのはどうなってるいのかというのをしらべる。ttyをいじるんだなってのはわかってpythonのttyモジュールを調べたがあんまり解説がないねと。詳解UNIXプログラミングなんぞを久しぶりにひっぱりだしてごにょごにょやってみた。
import tty
import sys
import time
import signal
from pprint import pprint
from termios import *
mode = tcgetattr(sys.stdout)
def handler(signum, frame):
print "signal\n"
tcsetattr(sys.stdout, TCSAFLUSH, mode)
sys.exit(0)
signal.signal(signal.SIGINT, handler)
tty.setcbreak(sys.stdout)
for i in range(20):
if i % 3 == 0 and i > 0:
sys.stdout.write("\n" )
sys.stdout.write("%d\r" % i )
sys.stdout.flush()
time.sleep(1)
tcsetattr(sys.stdout, TCSAFLUSH, mode)
こんな感じですかね。Control-Cを処理できないと何かと面倒なのでsignal処理も付け加える。

Debian QA
Facebook (taniguchi.takaki)
Twitter (@takaki_t)