Tag Archives: パイプ

pythonでcat

catコマンド

ファイルの中身を表示する

以下のようにしても動く

これは標準入力からファイルの内容を受け取りそれを出力している。

標準入力での切り分け

上記のことをpythonで実現するにはまず標準入力が普通の標準入力(キーボード)かパイプかを調べて処理を分ける。

ttyとはteleprinterのことで、昔あった手元にあるキーボードから遠くのプリンターに文字をタイプするマシンのことらしい。Linux界では接続されているキーボードをttyという概念で認識する。

ttyだった場合、引数にファイルがあればそれを表示し、なければ標準入力(キーボード)から入力を受け付ける。

ファイルの処理

パイプの処理

標準入力がキーボードで引数がない場合やパイプの場合はstdinから読み込む

これで大体動くが、catとの違いはキーボードから入力したときのエコーバックの時期が違う。catは1行ごとにエコーバックするが、このスクリプトの場合、Ctrl+D(Linux)やCtrl+Z(Windows)でEOFが送られるか、バッファがいっぱいになるまでwriteへ処理がいかない。よってこれを直す。

考察

キーボードとパイプの両方から入力を受け付けると便利なことが多い。スクリプトがjsonファイルを受け付けるとき、ユーザー側には他の形式のファイルがあってそれをjsonに変換してスクリプトの入力としたい時などパイプ入力がないといったんファイルに変換しないとならなくなる。