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


255

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

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


아닌 pythonist,하지만 당신은 사용해야 이러한 임시 파일 / 디렉터리를 생성하는 방법을
skrat

1
docs.python.org/library/tempfile.html 의 tempfile 모듈을 참조하십시오 .
Jordan Parmer

답변:


381

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

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

예:

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. 최후의 수단으로 현재 작업 디렉토리.

7
저에게는 OSX가 /var/folders/<garbage/here>대신 설정되어 /tmp있기 때문에 그것을 넣었습니다 $TMPDIR. 여기를 참조 하십시오 .
Rick Smith

3
현재 Windows 10의 python 3.6.5에서는으로 tempfile.gettempdir()해결됩니다 C:\users\user\AppData\Local\Temp. 불행히도 긴 길.
해결 J

61

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

print tempfile.gettempdir()

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

c:\temp

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

/tmp

15

나는 사용한다:

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'; 내가 항상 원하지 않는 것입니다.


1
적어도이 경우 MacOS는 사용자 수준의 격리 된 임시 디렉토리를 반환하는 올바른 작업을 수행합니다. 나는 이것이 당신이 필요로하는 것임을 99.99 % 확신합니다 .... 운영 체제를 망치고 싶지 않다면.
sorin

1
@sorin 99.99 %는 늘었습니다. 50 %가 더 현실적이라고 말하고 싶습니다. 종종 멀티 프로세싱으로 작업하고 있으며 모든 프로세스에 대해 동일한 임시 디렉토리를 원할 수 있습니다.
Acumenus

11

@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 진 해시와 앱별 접두사를 사용하여 자신의 존재를 "광고"합니다.


1
당신이 사용해야하는 tempfile.mkdtemp()대신
nosklo

@nosklo는 확실히 옵션이며 tempfile 패키지에 내장 된 모든 견고성을 활용하지만 해시 접근 방식을 사용하면 원하는 경로를 만들고 요구 사항을 충족하는 디렉토리 트리에 여러 디렉토리를 중첩시킬 수 있습니다. 기본적으로 mkdtemp()제안 된 보다 명시적이고 유연한 버전입니다 .
호브
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.