[英]Recursively fetch all files from shared folder using Python
我已經使用 Pywin32 建立了與 Windows 共享驅動器的連接
import win32net
data = {
'remote': r"\\server\shared",
'local': '',
'username': 'username',
'password': 'password'
}
win32net.NetUseAdd(None, 2, data)
我需要列出共享文件夾中存在的所有文件,類似於os.walk(path)
。
有哪些可能的方法可以做到這一點?
檢查[ME.TimGolden]: Python for Win32 Extensions Help
((官方)由[GitHub] 引用:mhammond/pywin32 - Python for Windows (pywin32) Extensions是Python wrapper ove WinAPI s)。
win3.net.NetUseAdd包裝[MS.Learn}: NetUseAdd function (lmuse.h) 。
[MS.Learn]:USE_INFO_2 結構 (lmuse.h) (由[ME.TimGolden] 包裝:PyUSE_INFO_2 Object - 您使用的)指出:
ui2_local
類型: LMSTR
指向包含本地設備名稱(例如,驅動器 E 或 LPT1)的字符串的指針被重定向到共享資源。 常量 DEVLEN 指定字符串中的最大字符數。 該成員可以是NULL 。 有關詳細信息,請參閱以下備注部分。
您所要做的就是:
提供一個本地名稱(未使用)
連接成功后,使用它(就像任何“常規”本地驅動器一樣)
代碼00.py :
#!/usr/bin/env python
import os
import sys
import win32net as wnet
def main(*argv):
local_drive = "y:"
data = {
"remote": r"\\localhost\share_cfati",
"local": local_drive,
"username": "user", # @TODO - cfati: Modified to hide sensitive data
"password": "***", # @TODO - cfati: Modified to hide sensitive data
}
try:
res = wnet.NetUseAdd(None, 2, data)
#print(res)
except:
print("Error adding connection:", sys.exc_info())
return -1
print("Items in the shared folder:\n{:}".format(os.listdir(local_drive)))
if __name__ == "__main__":
print("Python {:s} {:03d}bit on {:s}\n".format(" ".join(elem.strip() for elem in sys.version.split("\n")),
64 if sys.maxsize > 0x100000000 else 32, sys.platform))
rc = main(*sys.argv[1:])
print("\nDone.\n")
sys.exit(rc)
Output :
[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q075267137]> sopr.bat ### Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ### [prompt]> [prompt]>.net share Share name Resource Remark ------------------------------------------------------------------------------- ADMIN$ C:\WINDOWS Remote Admin C$ C:\ Default share E$ E:\ Default share F$ F:\ Default share G$ G:\ Default share H$ H:\ Default share IPC$ Remote IPC L$ L:\ Default share M$ M:\ Default share N$ N:\ Default share share_cfati L:\Share\cfati share_pub_ro L:\Share\pub_ro share_pub_rw L:\Share\pub_rw The command completed successfully. [prompt]> [prompt]>.net use New connections will not be remembered. There are no entries in the list. [prompt]> [prompt]> "e:\Work\Dev\VEnvs\py_pc064_03.10_test0\Scripts\python.exe"./code00.py Python 3.10.9 (tags/v3.10.9:1dd9be6, Dec 6 2022, 20:01:21) [MSC v.1934 64 bit (AMD64)] 064bit on win32 Items in the shared folder: ['.DS_Store', 'a.py', 'b', 'c', 'code00.py', 'commander.dmg', 'copy_sdk-aars.sh', 'cstrike1.6.zip', 'dedus', 'doublecmd.xml', 'ifm', 'pula', 'py2713.tgz'] Done. [prompt]> [prompt]>.net use New connections will not be remembered. Status Local Remote Network ------------------------------------------------------------------------------- OK Y: \\localhost\share_cfati Microsoft Windows Network The command completed successfully. [prompt]> [prompt]>.net use /delete y: y: was deleted successfully. [prompt]> [prompt]>.net use New connections will not be remembered. There are no entries in the list.
注意事項:
這相當於Win UI中的Map.network drive...功能
通常,當資源用完后,最好釋放它。 我刪除了連接( net use /delete y:
),但這也可以通過 win3.net.NetUseDel* 從代碼中完成
文件(文件夾)瀏覽本身不是這個問題的一部分(至少我不認為是),因為它是一個不同的(獨立的)主題。 檢查[SO]:如何列出目錄的所有文件? (@CristiFati 的回答)以深入分析如何做
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.