PyOne

Python 用ワンライナー支援スクリプト

back [English]

Last Modified: Wed Feb 26 01:42:10 EST 2003 (02/26, 15:42 JST)

これなに?

PyOne は Python で quick & dirty なワンライナーを書くための支援スクリプトです。 アイデアは Pyawk とだいたい似ているのですが、 PyOne はより簡単に、ちょろっと書けるようなインターフェイスを目指しています。 基本的にやってることはマクロ展開をして eval してるだけです。

PyOne は、初心者にはお勧めできない。 ワンライナーは読みにくいし意図しないミスも入りやすくなるし、 間違ってもこんなものを再利用しようなどと考えてはいけません。 これは Perl に毒された人専用です。


ダウンロード


説明

与えられたスクリプトをインデントされた Python コードに 変換し実行する。単一の式が与えられた場合はたんに eval し、 返り値を表示して終了する。

書式

pyone [-d] [-i modules] [-f modules] script args ...

オプション

-d
デバッグモード (展開したコードを表示して終了)
-i modules
'import modules' をスクリプトの先頭に追加する。
-f modules
'from modules import *' をスクリプトの先頭に追加する。

文法

;
改行を挿入、インデントする。
例: "A; B; C" は次のように展開される。
       A
       B
       C
       
{ ... }
中括弧に囲まれた部分をインデントする。
例: "A { B; C }" は次のように展開される。
       A:
         B
         C
       
EL{ ... }
中括弧に囲まれた部分をループにし、与えられたファイル (あるいは標準入力) を 1行読むごとに中身が実行されるようにする。awk と同じ。
注意: "EL" と "{" の間は空けないこと。

ループ中では以下の変数が定義されている:

正確には、これは以下のようにコードを展開します:

       L = -1
         while 1:
         S = getnextline(args)
         if not S: break
         L = L + 1
         s = string.strip(S)
         F = string.split(s, DELIM)
         I = map(toint, F)
         (... ここにコードが入る ...)
       

特殊な変数

DELIM
フィールドセパレータ。 EL { } ループ中で使われる。
args[]
コマンドライン引数。

使用例

    $ pyone 2+3*5.6
    $ pyone -f cdb 'd=init("hoge.cdb");EL{if d.get(F[0]): print s}' testfiles
    $ wget -q -O- http://slashdot.org/ | \
      pyone -f sgmllib 't=[""];class p(SGMLParser){def handle_data(s,x){global t;t[-1]+=x;} \
                        def start_td(s,x){t.append("")} def end_td(s){print t[-1];del(t[-1])}} \
                        x=p(); EL{x.feed(s)}'

作者

Yusuke Shinyama (yusuke at cs . nyu . edu)


Yusuke Shinyama