# 35.10. `pipes` --- シェルパイプラインへのインタフェース

ソースコード: Lib/pipes.py

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

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

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

class `pipes.``Template`

  パイプラインを抽象化したクラス。

以下はプログラム例です:

    >>> import pipes
    >>> t = pipes.Template()
    >>> t.append('tr a-z A-Z', '--')
    >>> f = t.open('pipefile', 'w')
    >>> f.write('hello world')
    >>> f.close()
    >>> open('pipefile').read()
    'HELLO WORLD'

## 35.10.1. テンプレートオブジェクト

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

`Template.``reset`()

  パイプラインテンプレートを初期状態に戻します。

`Template.``clone`()

  元のパイプラインテンプレートと等価の新しいオブジェクトを返します。

`Template.``debug`(flag)

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

`Template.``append`(cmd, kind)

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

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

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

`Template.``prepend`(cmd, kind)

  パイプラインの先頭に新しいアクションを追加します。引数の説明については `append()` を参照してください。

`Template.``open`(file, mode)

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

`Template.``copy`(infile, outfile)

  パイプを通して infile を outfile にコピーします。