2

小さなコマンド ライン ユーティリティを作成しています。うまくいけば、OSX、UNIX、および Linux で実行できるはずです。

小さな YAML 構成ファイルなど、いくつかの設定をどこかに保存する必要があります。そのようなファイルをどこに保存しますか?

言語: Python 2.7
OS: *nix

4

4 に答える 4

4

通常、これらのファイルは ~/.rc (例: ~/.hgrc) のような場所にあります。これは、ファイルへのパス、または多くの構成設定が必要な場合はディレクトリへのパスです。

わかりやすい説明については、http://www.linuxtopia.org/online_books/programming_books/art_of_unix_programming/ch10s03.htmlを参照してください。

于 2012-06-29T22:44:20.223 に答える
3

アプリケーションの名前が「someapp」の場合、設定を .xml などのファイルに保存します$HOME/.someapp。必要に応じて、構成ファイルに拡張子を付けることができます。アプリに複数の構成ファイルがあると思われる場合は、ディレクトリ$HOME/.someappを使用して、そこに通常の名前の (非表示ではない) ファイルを作成できます。

于 2012-06-29T22:44:45.263 に答える
3

~ファイルが完全にがらくたであふれているという理由だけで、ファイルをディレクトリに配置することは避けます。最近の傾向は、少なくとも ubuntu では、~/.config/<appname>/必要なドット ファイルに使用することです。私はその大会がとても好きです。

于 2012-06-29T22:45:32.700 に答える
1

多くのクロスプラットフォーム ツールは、OS X でも Linux (およびその他の POSIX/非 Windows プラットフォーム) と同じパスを使用します。POSIX の場所を使用する主な利点は、数行のコードを節約できることではなく、Mac 固有の手順が不要になることと、Mac ユーザーがコミュニティの Linux ユーザーから (提案を翻訳する必要なく) 助けを得られることです。 )。

もう 1 つの方法は、~/Library の下の「Mac に適した」場所に配置することです。Mac の場所を使用する主な利点は、コードをサンドボックス化する予定がない限り、基本的に「Apple がそう言っている」ことです。

ライブラリの場所を使用する場合は、「ファイル システム プログラミング ガイド」の「 OS X ファイル システムについて」および「 OS X ライブラリ ディレクトリの詳細」を読む必要がありますが、短いバージョンは次のとおりです。

  • ほとんどすべて: アプリの名前またはバンドル ID を含むサブディレクトリを作成します (わざわざバンドル ID を設定しない限り、望ましくない org.python.python を取得します…) ~/ の下ライブラリ/アプリケーションのサポート。理想的には、パスを取得するために -[NSFileManager URLForDirectory:inDomain:propertyForURL:create:error:] のような API を使用する必要があります。そうでない場合は、ローカリゼーション、サンドボックス コンテナーなどを手動で処理する必要があります。
  • 簡単に再作成できるもの (したがって、バックアップや移行などを行う必要はありません): ~/Library/Caches の同じ名前のサブディレクトリ。
  • 設定: 代わりに NSUserDefaults または CFPreferences API を使用してください。独自の形式を使用する場合、「古い」方法は、アプリの名前またはバンドル ID で名前を付けた ~/Library/Preferences の下にサブディレクトリを作成し、そこにファイルを配置することです。Apple はもはやそれを推奨していませんが、実際には別の方法を推奨していません (「CFPreferences を使用してください!」以外)。多くのアプリ (Aquamacs など) は今でも昔ながらの方法でそれを行っていますが、その他のアプリは設定ではなく、Application Support の下に保存しています。

Python では、これは次のように機能します (エラー処理を省略し、バンドル ID を自分で設定する代わりに名前で実行すると仮定します)。

from Foundation import *
fm = NSFileManager.defaultManager()
appsupport = (fm.URLForDirectory_inDomain_appropriateForURL_create_error_(
  NSApplicationSupportDirectory, NSUserDomainMask, None, True, None)[0].
  URLByAppendingPathComponent_isDirectory_(
  appname, True))
caches = (fm.URLForDirectory_inDomain_appropriateForURL_create_error_(
  NSCachesDirectory, NSUserDomainMask, None, True, None)[0].
  URLByAppendingPathComponent_isDirectory_(
  appname, True))
prefs = NSUserDefaults.persistentDomainForName_(appname)
于 2012-07-02T18:21:01.833 に答える