在Windows 7與Python 2.7如何檢測路徑是否是符號鏈接? 這不起作用,它說如果返回false或不支持,我提供的路徑肯定是一個符號鏈接,所以我假設它不支持在Windows上?我能做什麼?os.path.islink與Python的窗口
回答
根本問題是您使用的Python版本太舊。如果你想堅持2.x,你將無法利用2010年初之後添加的新功能。
其中一個功能是處理NTFS符號鏈接。在3.2中加入在2010年底該功能(見3.2,3.1,並且2.7源的詳細信息。)
原因的Python沒有處理NTFS符號鏈接在此之前是沒有這樣的事,直到2009年年底。 (IIRC,支持包含在6.0內核中,但用戶空間支持需要Vista/2008上的Service Pack;只有7/2008R2和更新的內置內置內置。另外,您需要一個足夠新的MSVCRT才能訪問用戶級支持,而且Python有明確的政策,不會在次要版本中升級到新的Visual Studio版本。)
代碼未被移植回2.x的原因是that there will never be a 2.8,並且錯誤修復版本像2.7。 3(或2.7.4)不會得到ne w功能,只有錯誤修復。
這已報告爲issue 13143,並且打算修復此問題的目的是更改2.7文檔以闡明在Windows上始終返回False
。
因此,如果您想在Windows下閱讀NTFS符號鏈接,請升級到Python 3.2+,或者您必須使用win32api
,ctypes
等自己完成。
或者,正如Martijn Pieters所建議的那樣,您可以使用像jaraco.windows
這樣的第三方庫和/或借用their code。或者,如果你真的想要,可以從3.2源代碼中借用代碼並在其周圍構建一個C擴展模組。如果你從ntpath
到os
到nt
(實際上是posixmodule.c
),我相信它的膽量在win32_xstat_impl
and win32_xstat_impl_w
。
誰低估,謹慎解釋爲什麼? – abarnert 2013-03-06 22:28:05
太棒了!謝謝你abarnert – user391986 2013-03-06 23:04:23
你必須誤導。重分析點確實存在於Windows NT 5(Windows 2000)與NTFS 3.0。它功能強大。 python的實現簡直是懶惰或者也是錯誤的。 – 2015-01-15 05:10:32
這是我結束了使用,以確定是否一個文件或目錄是Windows 7的鏈接:
def isLink(path):
if os.path.exists(path):
if os.path.isdir(path):
FILE_ATTRIBUTE_REPARSE_POINT = 0x0400
attributes = ctypes.windll.kernel32.GetFileAttributesW(unicode(path))
return (attributes & FILE_ATTRIBUTE_REPARSE_POINT) > 0
else:
command = ['dir', path]
try:
with open(os.devnull, 'w') as NULL_FILE:
o0 = check_output(command, stderr=NULL_FILE, shell=True)
except CalledProcessError as e:
print e.output
return False
o1 = [s.strip() for s in o0.split('\n')]
if len(o1) < 6:
return False
else:
return 'SYMLINK' in o1[5]
else:
return False
編輯:修改後的代碼按Zitrax和安南
的建議目錄:
import os, ctypes
def IsSymlink(path):
FILE_ATTRIBUTE_REPARSE_POINT = 0x0400
return os.path.isdir(path) and (ctypes.windll.kernel32.GetFileAttributesW(unicode(path)) & FILE_ATTRIBUTE_REPARSE_POINT):
- 1. python多處理與2 gtk窗口
- 2. Python:與窗口應用程序通信
- 3. 把界面放在窗口與python?
- 4. 與窗口
- 5. Python窗口激活
- 6. Python工具窗口
- 7. Python覆蓋窗口
- 8. Python窗口定位?
- 9. Python窗口焦點
- 10. 改變Python窗口
- 11. python webdriver os窗口
- 12. 「窗口內窗口」與Swing和Netbeans
- 13. Python中的窗口調整
- 14. Python的gtk多窗口
- 15. 窗口上的python settings.py
- 16. 的Python在滾動窗口
- 17. 窗口上的python + gtk3?
- 18. Python中的滾動窗口
- 19. 窗口:與承諾
- 20. 與前臺窗口
- 21. 問題與窗口
- 22. pyinstaller與matplotlib窗口
- 23. 問題與窗口
- 24. 從python的tkinter的頂層窗口關閉主窗口
- 25. 與Linux的透明窗口
- 26. 與QT的多個窗口
- 27. 窗口與Javascript的變量
- 28. 與jQuery的動畫窗口
- 29. Python中的摺疊窗口不斷出現在根窗口下
- 30. 從QDialog窗口打開Python PyQt4新的QWidget窗口
[這](http://bugs.python.org/issue13143)可以provid e一些幫助。 – crayzeewulf 2013-03-06 21:46:06
查看['jaraco.windows'包](https://bitbucket.org/jaraco/jaraco.windows/src/default/jaraco/windows/filesystem/__init__.py);它必須使用'ctypes'來支持這一點。 Python 3.2 *確實*支持Windows符號鏈接。 – 2013-03-06 21:46:34