Hatena::ブログ(Diary)

みずぴー日記 Twitter

2009-10-19(月)

watchコマンドを作ってみた

| watchコマンドを作ってみたを含むブックマーク

30分プログラム、その680。watchコマンドを作ってみました。

watchコマンドって知っていますか?

$ watch hogehoge

とやると、一定時間ごとにhogehogeを実行して画面を更新してくれるコマンドです。

watch dateで時計変わりにしたり、watch lsでファイルが作られる様子を監視したりと、なかなか便利です。

というわけで、これを作ってみましょう。

使い方

$ python watch.py w

f:id:mzp:20091019224015p:image

ソースコード

#! /usr/bin/python
# -*- mode:python; coding:utf-8 -*-
#
# watch.py -
#
# Copyright(C) 2009 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2009/10/19 21:21:15
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#
import subprocess
import time
import sys
from curses import *

def shell(cmds):
    return subprocess.Popen(cmds, stdout = subprocess.PIPE).communicate()[0]

def watch(cmds):
    screen = initscr()
    noecho()
    while 1:
        screen.clear()
        screen.addstr(0,0,"Every 2.0s")
        screen.addstr(1,0,shell(cmds))
        screen.refresh()
        time.sleep(2)

watch(sys.argv[1:])

参考

yoshihiro503yoshihiro503 2009/10/20 19:16 > 再帰のあるバリアントはInductiveで定義する
再帰のないバリアントもInductiveで定義しますよ。

> andはProp上の演算。andbはbool上の演算
補足ですがandは(/\), andbは (&&) という二項演算子があります。

String同士の比較はstring_decという関数が用意されてますよ。
これを使って if string_dec s1 s2 then ... else ... というように書けます。Stringに限らず 比較とか判定とかするときは、boolへの関数を使うより 「何とか_dec」という関数を使った方が便利な場合が多いので おすすめです。

mzpmzp 2009/10/21 21:15 > 再帰のないバリアントもInductiveで定義しますよ。
今、reference manualを読んだら、boolもInductiveで定義していますね。勘違いしていたみたいです。

> andは(/\), andbは (&&) という二項演算子があります。
おお! 普通に書けばよかったんですね。

> string_dec
ありがとうございます。試してみます。