rabbitfoot530's diary

読んだ本と、プログラムに関することのメモです。好きな言語は、C++, Python, Golang, TypeScript。数学・物理・学習理論も好きです。

PythonによるLinuxプログラミングインタフェース(5章 mkstemp)

 第5章のP115のテンポラリファイル作成のpythonコード。

#/usr/bin/env
#-*- encoding: utf-8 -*-
import tempfile
import os
import time

# don't use
# os.tmpnam (see: http://docs.python.org/2/library/os.html#os.tmpnam)
# os.tempnam (see: http://docs.python.org/2/library/os.html#os.tempnam)
# tempfile.mktemp (see: http://docs.python.org/2/library/tempfile.html#tempfile.mktemp)
# instead of tempfile.mkstemp
def pythonic():
    suffix = "XXXXXXX"
    prefix = "YYYY"
    # you can change temp path
    # dir = "/tmp"
    text = False
    # mkstemp return fd by os.open() and temp path
    fd, path = tempfile.mkstemp(
        suffix=suffix,
        prefix=prefix,
        text=text
    )

    if -1 == fd:
        exit()

    print("Generated filename was: {0}".format(path))
    # if you want to check temp file exist, try following sleep func!
    # time.sleep(10)
    os.unlink(path)
    os.close(fd)


if __name__ == '__main__':
    pythonic()

 テンポラリファイル作成には、os.tmpnam, os.tempnam, tempfile.mktempがあるが、tempfile.mkstempを使う。理由は上記コードのリンク先を参照。 テンポラリファイルの場所は、OSによって違うと思う。OSXで実行したら、/tmpではなかった。指定することも出来る。  実際に、ファイルがunlinkする前に作成されてるか確認するには、time.sleepをコメントアウトしてファイルの存在を確認すると、実際にテンポラリファイルが作成されていることがわかる。