web-dev-qa-db-ja.com

PythonでRAMディスクを作成するにはどうすればよいですか?

PythonでRAMディスクを作成したい。クロスプラットフォームの方法でこれを実行できるようにしたいので、Windows XP-to-7、Mac、およびLinuxで動作します。通常のドライブのように、できればドライブ文字/パスを使用して、RAMディスクの読み取り/書き込みができるようにしたい。

これが必要な理由は、特定の構造を持つディレクトリを作成するスクリプトのテストを作成するためです。 ramdiskにディレクトリを完全に作成したいので、テストが終了した後にディレクトリが完全に削除されることを確認します。 Pythonのtempfileを使用することを検討しましたが、テストが途中で停止する場合、ディレクトリが削除されない可能性があります。テストの途中で誰かがコンピューターのプラグを抜いても、完全に削除されていることを確認したいと思います。

39
Ram Rachum

PyFilesystem はどうですか?

https://docs.pyfilesystem.org/en/latest/reference/memoryfs.html

https://docs.pyfilesystem.org/en/latest/reference/tempfs.html

欠点は、PyFilesystem APIを使用してファイルシステムにアクセスする必要があることですが、PyFilesystemを使用して実際のfsにアクセスすることもできます。

15
Epeli

ファイルとディレクトリの処理は非常に低レベルでOSに依存しているため、必要なものが存在する(または可能でさえある)とは思えません。最善の策は、作成されたファイルとディレクトリ階層、およびそれらのコンテンツを追跡する「仮想」ファイルシステムのような関数、クラス、およびメソッドのセットを実装することです。

このようなエミュレーションの呼び出し可能オブジェクトは、アプリケーションが使用するさまざまなPython標準の組み込みおよびモジュールの対応するものと同じ署名を持ち、同じ値を返す必要があります。

必ずしも必要ではないので、実際に使用している量によっては、これは思ったほど多くの作業ではないかもしれません-標準のPythonファイルシステムインターフェイスをエミュレートします)また、Pure Python™で記述されている場合は、移植性が高く、保守と拡張が容易です。

4
martineau

1つのオプションは、osモジュールで使用されるメソッドの変更バージョンと、ディスクではなくopenファイルに書き込む組み込みのfileおよびStringIOを挿入することです(モンキーパッチ)。明らかに、この置換はテスト対象のモジュールに対してのみ発生するはずです。