5.20.2 shlex オブジェクト

shlex インスタンスは以下のメソッドを持っています:

get_token( )
トークンを一つ返します。トークンが push_token() で 使ってスタックに積まれていた場合、トークンをスタックからポップ します。そうでない場合、トークンを一つ入力ストリームから読み出します。 読み出し即時にファイル終了子に遭遇した場合、self.eof (非 POSIX モードでは空文字列 ('')、POSIX モードでは None) が返されます。

push_token( str)
トークンスタックに引数文字列をスタックします。

read_token( )
生 (raw) のトークンを読み出します。プッシュバックスタックを無視し、 かつソースリクエストを解釈しません (通常これは便利なエントリポイント ではありません。完全性のためにここで記述されています)。

sourcehook( filename)
shlex がソースリクエスト (下の source を参照して ください) を検出した際、このメソッドはその後に続くトークンを 引数として渡され、ファイル名と開かれたファイル類似オブジェクトからなる タプルを返すとされています。

通常、このメソッドはまず引数から何らかのクオートを剥ぎ取ります。 処理後の引数が絶対パス名であった場合か、以前に有効になったソースリクエスト が存在しない場合か、以前のソースが (sys.stdin のような) ストリームであった場合、この結果はそのままにされます。そうでない 場合で、処理後の引数が相対パス名の場合、ソースインクルードスタックに ある直前のファイル名からディレクトリ部分が取り出され、相対パスの 前の部分に追加されます (この動作は C 言語プリプロセッサにおける #include "file.h" の扱いと同様です) 。

これらの操作の結果はファイル名として扱われ、タプルの最初の要素 として返されます。同時にこのファイル名で open() を呼び出した 結果が二つ目の要素になります (注意: インスタンス初期化のときとは 引数の並びが逆になっています!)

このフックはディレクトリサーチパスや、ファイル拡張子の追加、その他の 名前空間に関するハックを実装できるようにするために公開されています。 `close' フックに対応するものはありませんが、shlex インスタンスは ソースリクエストされている入力ストリームが EOF を返した時には close() を呼び出します。

ソーススタックをより明示的に操作するには、push_source() および pop_source() メソッドを使ってください。

push_source( stream[, filename])
入力ソースストリームを入力スタックにプッシュします。ファイル名 引数が指定された場合、以後のエラーメッセージ中で利用することが できます。sourcehook メソッドが内部で使用しているのと 同じメソッドです。 バージョン 2.1 で 新たに追加 された仕様です。

pop_source( )
最後にプッシュされた入力ソースを入力スタックからポップします。 字句解析器がスタック上の入力ストリームの EOF に到達した際に 利用するメソッドと同じです。 バージョン 2.1 で 新たに追加 された仕様です。

error_leader( [file[, line]])
このメソッドはエラーメッセージの論述部分を Unix C コンパイラ エラーラベルの形式で生成します; この書式は '"%s", line %d: ' で、"%s" は現在のソースファイル名 で置き換えられ、"%d" は現在の入力行番号で置き換えられます (オプションの引数を使ってこれらを上書きすることもできます)。

このやり方は、shlex のユーザに対して、Emacs やその他の Unix ツール群が解釈できる一般的な書式でのメッセージを生成する ことを推奨するために提供されています。

shlex サブクラスのインスタンスは、字句解析を制御したり、 デバッグに使えるような public なインスタンス変数を持っています:

commenters
コメントの開始として認識される文字列です。コメントの開始から行末 までのすべてのキャラクタ文字は無視されます。 標準では単に "#" が入っています。

wordchars
複数文字からなるトークンを構成するためにバッファに蓄積していく ような文字からなる文字列です。標準では、全ての ASCII 英数字 およびアンダースコアが入っています。

whitespace
空白と見なされ、読み飛ばされる文字群です。空白はトークンの境界を 作ります。標準では、スペース、タブ、改行 (linefeed) および 復帰 (carriage-return) が入っています。

escape
エスケープ文字と見なされる文字群です。これは POSIX モードでのみ使われ、デフォルトでは "\" だけが入っています。 バージョン 2.3 で 新たに追加 された仕様です。

quotes
文字列引用符と見なされる文字群です。トークンを構成する際、 同じクオートが再び出現するまで文字をバッファに蓄積します (すなわち、異なるクオート形式はシェル中で互いに保護し合う 関係にあります)。標準では、ASCII 単引用符および二重引用符 が入っています。

escapedquotes
quotes のうち、escape で定義されたエスケープ文字を解釈 する文字群です。これは POSIX モードでのみ使われ、デフォルトでは """ だけが入っています。 バージョン 2.3 で 新たに追加 された仕様です。

whitespace_split
この値が True であれば、トークンは空白文字でのみで分割されます。たとえば shlex がシェル引数と同じ方法で、コマンドラインを解析するのに便利です。 バージョン 2.3 で 新たに追加 された仕様です。

infile
現在の入力ファイル名です。クラスのインスタンス化時に初期設定 されるか、その後のソースリクエストでスタックされます。 エラーメッセージを構成する際にこの値を調べると便利なことがあります。

instream
shlex インスタンスが文字を読み出している入力ストリームです。

source
このメンバ変数は標準で None を取ります。この値に文字列を 代入すると、その文字列は多くのシェルにおける "source" キーワード に似た、字句解析レベルでのインクルード要求として認識されます。すなわち、 その直後に現れるトークンをファイル名として新たなストリームを開き、 そのストリームを入力として、EOF に到達するまで読み込まれます。 新たなストリームの EOF に到達した時点で close() が呼び出され、 入力は元の入力ストリームに戻されます。ソースリクエストは任意のレベル の深さまでスタックしてかまいません。

debug
このメンバ変数が数値で、かつ1 またはそれ以上の値の場合、 shlex インスタンスは動作に関する冗長な進捗報告を出力 します。この出力を使いたいなら、モジュールのソースコードを読めば 詳細を学ぶことができます。

lineno
ソース行番号 (遭遇した改行の数に 1 を加えたもの) です。

token
トークンバッファです。例外を捕捉した際にこの値を調べると便利なことが あります。

eof
ファイルの終端を決定するのに使われるトークンです。非 POSIX モードでは 空文字列 ('') 、POSIX モードでは None が入ります。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。