2010-12-04 173 views
29

私はPythonでRAMディスクを作成したいと思います。クロスプラットフォームでこれを実現したいので、Windows XPから7、Mac、Linuxで動作します。私はそれが普通のドライブのように、好ましくはドライブ文字/パスで、RAMディスクに読み書きできるようにしたい。Pythonでramdiskを作成するにはどうしたらいいですか?

これは、特定の構造を持つディレクトリを作成するスクリプトのテストを記述するためです。私は完全にRAMディスクにディレクトリを作成したいので、テストが終わったら完全に削除されることを確かめます。私はPythonのtempfileを使用すると考えましたが、テストが途中で停止すると、ディレクトリが削除されない可能性があります。テストの途中で誰かがコンピュータのプラグを引っ張っても削除されていることを完全に確認したい。

+7

私はむしろ、各OSが異なる方法でマウントするので、これを行うための単純な、クロスプラットフォームの方法はないと思う。非常に興味深い質問、しかし! –

+0

"テストが途中で中止された場合、ディレクトリは削除されないかもしれません"これについての証拠はありますか?それはドキュメンテーションと矛盾します。 –

+1

@ S.Lottテストがそれ自身の後でクリーンアップしない(チャンスを得る)場合、私は想像する。どのような場合には、私は議論したいと思います:単に、既存の状態に関係なく、テスト設定をクリーンな状態(必要に応じて、おそらくディレクトリを削除)にするのはなぜですか? –

答えて

13

PyFilesystem

http://docs.pyfilesystem.org/en/latest/memoryfs.html#module-fs.memoryfs

http://docs.pyfilesystem.org/en/latest/tempfs.html#module-fs.tempfs

欠点は、あなたがPyFilesystem APIでのファイルシステムにアクセスするために持っていることですが、あなたはPyFilesystemと実際のFSにもアクセスすることができます。

+2

これは現在のところ最適な解決策のようですが、 'MemoryFS'で動作する' os.mkdir'(および他の関数)に代わるものが必要です。そのような機能が存在しない場合、私は自分自身を書く必要があります。 –

+0

実際には、Linuxシステム上でfuseを使ってMemoryFSをマウントし、Pythonのストック機能でアクセスすることができます。 http://www.willmcgugan.com/2010/6/20/pyfilesystem-03-released/ http://packages.python.org/fs/expose/fuse.html#module-fs.expose.fuse – Epeli

+0

ヒューズ事は本当に素晴らしいですが、クロスプラットフォームではないという事実は問題です。また、その中には、GPLライセンスが付いているものもあります。 –

4

ファイルやディレクトリの扱いが低レベルでOSに依存するため、私はあなたが望むものが何かのように疑う(または可能性もあります)。あなたの最善の策は、作成されたファイルとディレクトリ階層とそれらの内容を追跡する、ファンクション、クラス、およびメソッドの "仮想"ファイルシステムのようなセットを実装することです。

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

標準的なPythonファイルシステムインターフェイスをエミュレートするのは、実際に使用している量に応じて、これは聞こえるほどの作業ではないと思われます。なぜなら、必ずしもすべてを真似する必要はないからです。それ。また、Pure Python™で書かれていれば、移植性があり、維持管理しやすくなります。

+2

[fs](http://pypi.python.org/pypi/fs/0.3.0)のようなPythonモジュールがありますが、これはほとんど同じですが、それらを包むのは難しいので、マッチしない独自のインターフェイスを提供しますオブジェクトのメソッドとしてすべての操作を持っています –

+0

あなたは正しいです、私はあなたの提案を誤解しました。以前のコメントを削除して、他の人の誤った指摘を防ぐようにしました。 –

1

1つのオプションは、(モンキーパッチを)注入osモジュールだけでなく、StringIOファイルに代わりのディスクに書き込む組み込みコマンドopenfileで使用される方法の修正バージョンするかもしれません。明らかに、この置換はテスト対象のモジュールに対してのみ行う必要があります。

+0

私の場合、スクリプトはディレクトリを作成するので、助けにならないでしょう。 –

+0

同様に 'os.mkdir'をラップすることができます。 – SingleNegationElimination

+0

興味深い...そして、私はどのように 'os.mkdir'を"仮想化 "しますか? –

-6

これをお読みください:

http://docs.python.org/library/tempfile.html#tempfile.TemporaryFile

は「 は、一時記憶領域として利用することができ、ファイルのようなオブジェクトを返します ファイルはmkstemp()を使用して作成されたそれは ます。 が閉じられるとすぐに破棄されます( のオブジェクトがゴミである場合は が収集されます)。

これはすべてあなたのために処理されます。何もせず、すでに動作します。

+1

私が質問したように、ファイルだけでなくディレクトリを作成する必要があります。あなたのリンクから: "mkdtemp()のユーザーは、一時ディレクトリとその内容を削除する責任があります。" –

関連する問題