2009-09-20 45 views
4

目前構建的配方collective.recipe.omelette在所有版本的Windows上使用junction.exe來創建符號鏈接。然而,junction.exe並沒有默認帶有Windows,最重要的是不支持創建符號鏈接到文件(只有目錄),這會導致一些Python包出現問題。檢測Python中沒有Pywin32的Vista/7上的符號鏈接(mklink)

在NT6 +(Vista和7)現在是mklink工具,它不僅配備的缺省而且還能夠創建符號鏈接文件以及目錄。我想更新collective.recipe.omelette以使用它,如果可用並且已經這樣做了,除了一個簡單的功能外;檢測文件或文件夾是否實際上是符號鏈接。由於這是一個小的構建配方,在我看來,要求Pywin32有點太多了(除非setuptools可以以某種方式只能在Windows上下載它?)。

目前在Windows上所做的煎蛋是文件夾隨叫隨到junction.exe,然後用grep爲響應「替代名稱:」但我無法找到任何簡單的mklink。

我能想到的唯一方法是在目錄中調用「dir」,然後逐行查找「<SYMLINK>」和文件夾/文件名。當然有更好的?

回答

3

你能使用​​訪問各種需要的功能和結構?目前正在討論的this patch旨在在Vista和Windows 7下爲模塊os添加符號鏈接功能 - 但它不會在Python 2.7和3.2之前,所以等待(以及最新版本的需求)最終來)可能會太長;一個基於​​的解決方案可能會讓你滿意,並且補丁中的代碼顯示了在C中執行該操作需要花費多少時間(而在Python中進行基於ctypes的編程僅比C中的相同編程更難)。

除非有人在已經發布一樣junction.exe其他一些獨立的實用程序,用於此目的,我看不出有其他可行的辦法(直到補丁終於使得它成爲一個未來的Python的STDLIB)除了使用ctypes的,Pywin32,或dir,並且您已經排除了這三個選項中的最後兩個...!) - )

+0

我跟迪爾一起去了。我並不反對它,不知道我是否忽略了一種「正確」的方法來實現我想要的。 – 2009-09-22 02:16:39

2

對於Windows聯結和符號鏈接,重分析點的屬性爲FILE_ATTRIBUTE_REPARSE_POINT(0x400)。如果你得到文件的屬性,然後檢測這個?

您可以使用ctypes的(如對方回答說)來訪問Kernel32.dll and GetFileAttributes,並檢測該值。

5

jaraco.windows.filesystem對於沒有pywin32在Windows符號操作大量的示例(該jaraco.windows package的一部分)。

+0

到jaraco.com的鏈接現在提供404 – 2012-07-23 14:55:35

+0

謝謝@BryanOakley。我更新了鏈接。 – 2012-07-26 00:49:04

0

你可以充分利用的Tcl你有可用Tkinter的,因爲這有知道的路口,不像蟒蛇OS模塊「文件鏈接」命令。