Pythonで学ぶ「詳解 UNIXプログラミング」(その5) 第5章 標準入出力ライブラリ
5.1 getc()とputc()を用いて標準出力へコピーする
import sys while True: c = sys.stdin.read(1) if not c: break sys.stdout.write(c)
5.2 fgets()とfputs()を用いて標準出力へコピーする
import sys for line in sys.stdin: sys.stdout.write(line)
Pythonにはgetc()/putc()/fgetc()/fput()
がないので、ここでは似たような機能で再実装してみた。
サンプル5.1 はsys.stdin.read()
を使って、一文字ずつ読み込んでいる。サンプル5.2では、sys.stdin
をfor
文を使って読み込み、一行ずつ出力している。
5.3 さまざまな標準入出力ストリームのバッファリング方式を表示する
残念ながら、Pythonではファイルストリームのバッファリング方式を取得する手段は用意されておらず、サンプルを再実装することはできない。あまり必要となることはないだろうし、ポータブルな実現手段もないようなので、ここは諦めておこう。
5.4 tmpnamとtmpfileの使い方
import os, sys print os.tmpnam() # first temp name print os.tmpnam() # second temp name fp = os.tmpfile() # create temp file fp.write("one line of output\n") fp.seek(0) sys.stdout.write(fp.readline())
このサンプルスクリプトを実行すると、こんな警告が出力される。
RuntimeWarning: tmpnam is a potential security risk to your program
正直、いちいちこんなメッセージ出すのはうるさすぎる気もするが、まあそういうことだ。Pythonでは、よりセキュアに一時ファイルを作成するために、tempfile
モジュールが用意されている。
import tempfile
fp = tempfile.TemporaryFile()