このBlogは移転しました。今後は aish.dev を御覧ください。

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.stdinfor文を使って読み込み、一行ずつ出力している。

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()