如何用Python登录华为B618路由器挂载的Samba共享磁盘?
最简解决方案:自动登录Samba共享并完成备份
Hi 👋,先给你说清楚为啥之前的netmiko没用——那玩意儿是用来连接华为路由器的命令行界面(比如改路由器配置)的,完全不是用来访问路由器上的Samba共享的,方向错啦!
给你整个最适合新手的无额外依赖方案,直接用Windows自带的net use命令先建立带凭证的共享连接,再用你原来的shutil做备份,简单粗暴还靠谱。
核心思路
Windows的net use命令可以直接在命令行里传入Samba共享的用户名和密码,自动完成登录,之后你再用shutil操作共享路径就不会报1326错误了。
完整代码示例
import subprocess import shutil # 配置你的参数,直接改这里就行! SMB_SHARE = "//192.168.8.1/Test" USERNAME = "Test" PASSWORD = "Code1234" SOURCE_FOLDER = "C:/Users/User/OneDrive/Pictures/bg_drop" TARGET_FOLDER = "//192.168.8.1/Test/JMicron-00800154_usb1_1/Tristan Laptop Backups/Testing" try: # 第一步:用net use建立带凭证的共享连接 # 把路径的斜杠换成Windows命令行认的反斜杠 windows_share_path = SMB_SHARE.replace("/", "\\") subprocess.run( ["net", "use", windows_share_path, f"/user:{USERNAME}", PASSWORD], check=True, # 命令执行失败就抛出错误 capture_output=True, # 不显示命令行输出(可选) text=True ) print("✅ 成功连接到Samba共享") # 第二步:执行备份操作,和你原来的代码一样! shutil.copytree(SOURCE_FOLDER, TARGET_FOLDER) print("🎉 备份完成啦!") except subprocess.CalledProcessError as e: print(f"❌ 连接共享失败:{e.stderr.strip()}") except Exception as e: print(f"❌ 备份出错:{str(e)}") finally: # 可选:备份完成后断开共享连接(如果不需要一直连着的话) try: subprocess.run( ["net", "use", windows_share_path, "/delete", "/yes"], check=True, capture_output=True, text=True ) print("🔌 已断开共享连接") except: # 本来就没连接上的话,忽略这个错误就行 pass
代码说明
net use命令:这是Windows系统自带的工具,专门用来管理网络共享,/user:用户名 密码就是告诉系统用这个凭证登录共享- 路径转换:把Python里常用的正斜杠
/换成Windows命令行认的反斜杠\,避免命令报错 - 错误处理:用
try-except捕获连接和备份过程中的错误,能清楚看到哪里出问题 - 断开连接:
finally块里的代码不管备份成功失败都会执行,用完断开共享更干净(如果需要一直访问共享,可以删掉这部分)
额外提示
如果之后你想试试更专业的Python库操作Samba,可以装smbprotocol(pip install smbprotocol),但对于你的需求来说,上面的方案已经足够简单,不用额外装任何依赖,新手友好拉满!
内容的提问来源于stack exchange,提问作者minecraftnoob




