[python] 파이썬에서 임시 디렉토리를 얻는 플랫폼 간 방법

경로를 얻는 크로스 플랫폼 방법이 있습니까? tempPython 2.6 디렉토리 있습니까?

예를 들어, Linux에서는 /tmpXP, XP에서는 C:\Documents and settings\[user]\Application settings\Temp입니다.



답변

이것이 임시 파일 모듈입니다.

임시 디렉토리를 가져 오는 기능이 있으며 임시 파일과 디렉토리를 명명하거나 이름을 지정하지 않는 바로 가기도 있습니다.

예:

import tempfile

print tempfile.gettempdir() # prints the current temporary directory

f = tempfile.TemporaryFile()
f.write('something on temporaryfile')
f.seek(0) # return to beginning of file
print f.read() # reads data back from the file
f.close() # temporary file is automatically deleted here

완전성을 위해 다음은 설명서에 따라 임시 디렉토리를 검색하는 방법입니다.

  1. TMPDIR환경 변수에 의해 명명 된 디렉토리 .
  2. TEMP환경 변수에 의해 명명 된 디렉토리 .
  3. TMP환경 변수에 의해 명명 된 디렉토리 .
  4. 플랫폼 별 위치 :
    • RiscOS 디렉토리에 의해 명명Wimp$ScrapDir 환경 변수입니다.
    • 윈도우 , 디렉토리 C:\TEMP, C:\TMP, \TEMP,와 \TMP, 그 순서이다.
    • 다른 모든 플랫폼, 디렉토리에 /tmp, /var/tmp그리고 /usr/tmp순서대로.
  5. 최후의 수단으로 현재 작업 디렉토리.

답변

이것은 당신이 원하는 것을해야합니다 :

print tempfile.gettempdir()

내 Windows 상자에서 다음을 얻습니다.

c:\temp

그리고 내 리눅스 박스에서 나는 얻는다 :

/tmp


답변

나는 사용한다:

from pathlib import Path
import platform
import tempfile

tempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())

이는 맥 OS, 즉 다윈에, tempfile.gettempdir()그리고 os.getenv('TMPDIR')같은 값을 반환 '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'; 내가 항상 원하지 않는 것입니다.


답변

@nosklo의 의견과 답변을 기반으로하는 가장 간단한 방법 :

import tempfile
tmp = tempfile.mkdtemp()

그러나 디렉토리 작성을 수동으로 제어하려면 다음을 수행하십시오.

import os
from tempfile import gettempdir
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times())))
os.makedirs(tmp)

그러면 개인 정보 보호, 리소스, 보안 등을 위해 다음과 같은 작업을 수행 한 후 쉽게 정리할 수 있습니다.

from shutil import rmtree
rmtree(tmp, ignore_errors=True)

이것은 Chrome 및 Linux와 같은 애플리케이션이하는 것과 유사합니다 systemd. 그들은 짧은 16 진 해시와 앱별 접두사를 사용하여 자신의 존재를 “광고”합니다.


답변