\section{\module{pipes} ---
         シェルパイプラインへのインタフェース}

\declaremodule{standard}{pipes}
  \platform{Unix}
\sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il}
\modulesynopsis{Python による \UNIX\ シェルパイプラインへのインタフェース。}


\module{pipes} モジュールでは、\emph{'pipeline'} の概念 --- ある
ファイルを別のファイルに変換する機構の直列接続 --- を抽象化する
ためのクラスを定義しています。

このモジュールは \program{/bin/sh} コマンドラインを利用するため、
\function{os.system()} および \function{os.popen()} のための 
\POSIX{} 準拠のシェル、または互換のシェルが必要です。

\module{pipes} モジュールでは、以下のクラスを定義しています:

\begin{classdesc}{Template}{}
パイプラインを抽象化したクラス。
\end{classdesc}

使用例:

\begin{verbatim}
>>> import pipes
>>> t=pipes.Template()
>>> t.append('tr a-z A-Z', '--')
>>> f=t.open('/tmp/1', 'w')
>>> f.write('hello world')
>>> f.close()
>>> open('/tmp/1').read()
'HELLO WORLD'
\end{verbatim}


\subsection{テンプレートオブジェクト \label{template-objects}}

テンプレートオブジェクトは以下のメソッドを持っています:

\begin{methoddesc}[Template]{reset}{}
パイプラインテンプレートを初期状態に戻します。
\end{methoddesc}

\begin{methoddesc}[Template]{clone}{}
元のパイプラインテンプレートと等価の新しいオブジェクトを返します。
\end{methoddesc}

\begin{methoddesc}[Template]{debug}{flag}
\var{flag} が真の場合、デバッグをオンにします。そうでない場合、
デバッグをオフにします。デバッグがオンの時には、実行されるコマンド
が印字され、より多くのメッセージを出力するようにするために、シェルに
\code{set -x} 命令を与えます。
\end{methoddesc}

\begin{methoddesc}[Template]{append}{cmd, kind}
新たなアクションをパイプラインの末尾に追加します。\var{cmd} 変数は
有効な bourne shell 命令でなければなりません。\var{kind} 変数は
二つの文字からなります。

最初の文字は \code{'-'} (コマンドが標準入力からデータを読み出すことを
意味します)、\code{'f'} (コマンドがコマンドライン上で与えたファイルから
データを読み出すことを意味します)、あるいは \code{'.'} (コマンドは
入力を読まないことを意味します、従ってパイプラインの先頭になります)、の
いずれかになります。

同様に、二つ目の文字は \code{'-'} (コマンドが標準出力に結果を書き込む
ことを意味します)、\code{'f'} (コマンドがコマンドライン上で指定した
ファイルに結果を書き込むことを意味します)、あるいは \code{'.'} (コマンド
はファイルを書き込まないことを意味し、パイプラインの末尾になります)、
のいずれかになります。
\end{methoddesc}

\begin{methoddesc}[Template]{prepend}{cmd, kind}
パイプラインの先頭に新しいアクションを追加します。引数の説明については
\method{append()} を参照してください。
\end{methoddesc}

\begin{methoddesc}[Template]{open}{file, mode}
ファイル類似のオブジェクトを返します。このオブジェクトは \var{file}
を開いていますが、パイプラインを通して読み書きするようになっています。
\var{mode} には \code{'r'} または \code{'w'} のいずれか一つしか与える
ことができないので注意してください。
\end{methoddesc}

\begin{methoddesc}[Template]{copy}{infile, outfile}
パイプを通して \var{infile} を \var{outfile} にコピーします。
\end{methoddesc}
