
:mod:`pipes` --- シェルパイプラインへのインタフェース
=====================================================

.. module:: pipes
   :platform: Unix
   :synopsis: Python による Unix シェルパイプラインへのインタフェース。
.. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il>


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

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

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


.. class:: Template()

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

使用例::

   >>> 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'


.. _template-objects:

テンプレートオブジェクト
------------------------

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


.. method:: Template.reset()

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


.. method:: Template.clone()

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


.. method:: Template.debug(flag)

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


.. method:: Template.append(cmd, kind)

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

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

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


.. method:: Template.prepend(cmd, kind)

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


.. method:: Template.open(file, mode)

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


.. method:: Template.copy(infile, outfile)

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

