You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用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,可以装smbprotocolpip install smbprotocol),但对于你的需求来说,上面的方案已经足够简单,不用额外装任何依赖,新手友好拉满!

内容的提问来源于stack exchange,提问作者minecraftnoob

火山引擎 最新活动