一時ディレクトリが必要ですが、その作成と削除を完全に制御したいです。
このディレクトリを使用して、新しいコミットを監視する git リポジトリを配置するため、それらをどこかに永続的に保存する必要があります。
/tmp
したがって、ユーザー(?)がクリアできるので、dirを避けたいと思います。これのベストプラクティスは何ですか?
tempfile.mkdtemp
あなたのために一時ディレクトリを作成し、その名前を返します。デフォルトでは (Unix ライクなシステムでは) 作成さ/tmp
れますが、「可能な限り最も安全な方法で」、呼び出し元のユーザー ID に対してのみ読み取り/書き込み/リストのアクセス許可が付与されます。
>>> d = tempfile.mktemp()
>>> with open(os.path.join(d, "secret")) as output:
... output.write("Ha, you can't read this!")
(ちなみに、デフォルト設定の Unix/Linux システムでは、ユーザーはお互いのファイルを編集したり、 から削除したりすることはできません/tmp
。)
を使用するのがベストプラクティスだと思いますtempfile.mkdtemp
。
その後を使用したくない場合/tmp
は、prefix
パラメーターを利用できます。
import tempfile
tempfile.mkdtemp(prefix=<your_preferred_directory>)
編集: アプリケーション構成、キャッシュ データなどを保存するのに最も適切なディレクトリについては、Linux を使用している場合は、XDG Base Directory Specificationを参照してください。
それが本当に一時的なものである場合は、larmans のアドバイスに従い、 を使用してmkdtemp
ください。
再起動後も存続する必要があるある種の半永久的なキャッシュである場合は、OS で定義されているローカル アプリケーション ディレクトリ (%APPDATA%、~/.local/ など) を使用する必要があります。一部のツールキット (Qt など) は、そのフォルダーをクロスプラットフォームで検索する機能を提供します。
編集:ウィキペディアから:
そのため、プラットフォームに応じてos.environ['APPDATA']
またはを検索し(「 」を参照)、アプリ名を追加すると、必要なものをそこに保存できます。os.environ['HOME']
sys.platform
mydir = os.path.join( ".myAppName", "cache")
homeVar = 'HOME' # default for all *nix variants
if sys.platform == 'win32':
homeVar = 'APPDATA'
mydir = os.path.join( os.environ[homeVar], mydir)
とはいえ、 git commit hooksを調べることをお勧めします。そうすれば、新しいコミットの tmp ディレクトリを監視する代わりに (奇妙に聞こえます: 権限が制限された tmp ディレクトリにコミットするのは誰でしょうか?)、レポはコミットについて通知するか、より具体的には、コミットが発生するたびにスクリプトを自動的に実行します..
http://pypi.python.org/pypi/appdirsは、クロスプラットフォームuser_cache_dir
機能を提供する Python モジュールです。
通常、プログラムは~/.progname
ディレクトリを使用して、永続的である必要があるがユーザーの「邪魔にならないように」保持する必要があるデータを格納します。