4

現在、ビルドアウト レシピ collective.recipe.omelette は、Windows のすべてのバージョンで junction.exe を使用してシンボリック リンクを作成します。ただし、junction.exe は既定では Windows に付属しておらず、最も重要なことに、ファイル (ディレクトリのみ) へのシンボリック リンクの作成をサポートしていないため、かなりの数の Python パッケージで問題が発生します。

NT6+ (Vista および 7) では、mklink ユーティリティがデフォルトで付属するだけでなく、ファイルやディレクトリへのシンボリック リンクを作成できるようになりました。可能な場合はこれを使用するように collective.recipe.omelette を更新したいと思います。それ以外の場合は単純な機能が 1 つあります。ファイルまたはフォルダーが実際にシンボリックリンクであるかどうかを検出します。これは小さなビルドアウト レシピであるため、私の意見では Pywin32 を必要とするのは少し多すぎます (setuptools が Windows でしかダウンロードできない場合を除きます)。

現在 Windows で omelette が行っていることは、フォルダーで junction.exe を呼び出し、"Substitute Name:" の応答を grep することですが、mklink ほど単純なものは見つかりません。

私が考えることができる唯一の方法は、ディレクトリで「dir」を呼び出してから、「<SYMLINK>」と同じ行のフォルダー/ファイル名を探して、応答を1行ずつ調べることです。確かにもっと良いものがありますか?

4

5 に答える 5

5

pywin32を使用しない Windows でのシンボリック リンク操作の広範な例については、 jaraco.windows.filesystem ( jaraco.windows パッケージの一部) を参照してください。

于 2009-10-23T22:13:35.730 に答える
3

ctypesさまざまな必要な機能や構造にアクセスする ために使用できますか? 現在議論中のこのパッチは、Vista および Windows 7 の下でモジュールにシンボリックリンク機能を追加することを目的としてosいますが、Python 2.7 および 3.2 より前には実装されないため、待機 (および最新バージョンが実装された場合の要件)最終的に来る)は長すぎる可能性があります。ベースのソリューションはあなたをctypes追い詰めるかもしれません.パッチのコードはそれを行うためにCで何が必要かを示しています.

誰かがこの目的のためのような他のスタンドアロン ユーティリティを既にリリースしていない限りjunction.exe、(そのパッチが最終的に将来の Python の stdlib になるまで) ctypes、Pywin32、または を使用する以外に他の実行可能なアプローチは見当たりdirません。これら 3 つのオプションのうち最後の 2 つを除外します...!-)

于 2009-09-20T23:35:01.920 に答える
2

Windows のジャンクションとシンボリック リンクには、FILE_ATTRIBUTE_REPARSE_POINT再解析ポイントの属性 (0x400) があります。ファイルの属性を取得したら、これを検出しますか?

(他の回答に記載されているように) ctypes を使用してKernel32.dll および GetFileAttributesにアクセスし、この値を検出できます。

于 2009-09-21T01:10:33.850 に答える
0

Python の os モジュールとは異なり、ジャンクションを認識する「ファイル リンク」コマンドがあるため、Tkinter で利用可能な Tcl を活用できます。

于 2011-01-06T00:03:08.100 に答える