Python对win机器磁盘、共享文件夹操作

解决在win机器22,445端口无法访问的前提下:
连接多个win机器磁盘映射或者访问共享文件夹问题

方法一: 直接套用如下脚本

导入os和subprocess模块。

1.使用subprocess.run执行net use命令查看该映射是否存在。

2.如果存在,则使用subprocess.run执行net use /delete命令断开该映射。

3.如果不存在,则执行net use命令映射该磁盘。

4.如果需要用户名密码,则要求用户输入,然后使用subprocess.run执行net use命令映射该磁盘。

import os
import subprocess

# 定义待检查的磁盘映射列表
drive_mappings = [
    {"drive": "X:", "path": "\\\\127.0..0.1\\shared", "user": "", "password": ""},
    {"drive": "Y:", "path": "\\\\127.0..0.2\\shared", "user": "username", "password": None},
    {"drive": "Z:", "path": "\\\\127.0..0.3\\shared", "user": "", "password": ""}
]

# 遍历映射列表,对每个映射进行检查和断开操作
for mapping in drive_mappings:
    # 执行net use命令查看该映射是否存在
    result = subprocess.run(["net", "use", mapping["drive"]], capture_output=True)
    
    # 如果存在,则执行net use /delete命令断开该映射, 如果gbk打印结果有问题,建议用cp850
    if "OK" in result.stdout.decode("gbk"):
        os.system(f"net use {mapping['drive']} /delete /yes")
				print(f"断开映射 {mapping['drive']}")
    # 如果不存在,则执行net use命令映射该磁盘
    else:
        # 判断是否需要输入用户名密码
        if mapping["user"]:
            password = input(f"请输入 {mapping['drive']} 的密码:")
            if password:
                mapping["password"] = password
            else:
                print("密码不能为空!")
                continue
        
        # 执行net use命令映射磁盘
        if mapping["password"] is not None:
            print(f"映射 {mapping['drive']}")
            os.system(f"net use {mapping['drive']} {mapping['path']} /user:{mapping['user']} {mapping['password']}")
        else:
            print(f"映射 {mapping['drive']}")
            os.system(f"net use {mapping['drive']} {mapping['path']}")

在这个示例中,每个映射都被表示成一个包含映射驱动器,网络共享路径,用户名和密码的字典。在遍历映射列表时,我们首先使用subprocess.run执行net use命令来检查是否存在映射。如果映射存在,我们使用os.system执行net use /delete命令来断开该映射。如果映射不存在,我们首先检查映射是否需要用户名和密码。如果需要,我们提示用户输入密码,然后再使用os.system执行net use命令来映射磁盘。如果不需要密码,则直接使用os.system映射磁盘。

**

方法二: 调用封装函数

**

将脚本实现封装后,只需要在MapDisk.yaml文件中写用例即可,此后执行Map_disk.py脚本即可实现win磁盘的一些映射操作

目录介绍:

在这里插入图片描述

脚本附上:

yaml填写需要映射的磁盘 和 共享路径即可 用户名密码有则填写,无则忽略

MapDisk.yaml 填写用例

MapDisk:
  -
    dirver_disk: "W:"
    map_path: \\127.0.0.1\d$
    user:
    password:

  -
    dirver_disk: "E:"
    map_path: \\127.0.0.2\d$
    user: uatadmin
    password: Uat@yybp5.11215

PublicConfig.py脚本: 配置读取信息,方便调用

import os
from Public_Utils.util_yaml import YamlReader

class YamlPath:
    def __init__(self):
        current = os.path.abspath(__file__)
        self.base_dir = os.path.dirname(os.path.dirname(current))

    def get_disk_yaml_file(self):
        _config_path = self.base_dir + os.sep + "Public_Config\Public_yaml"
        self._config_file = _config_path + os.sep + "MapDisk.yaml"
        return self._config_file

    def get_win_yaml_file(self):
        _config_path = self.base_dir + os.sep + "Public_Config\Public_yaml"
        self._config_file = _config_path + os.sep + "Mapwins.yaml"
        return self._config_file


class ConfigYaml:
    def __init__(self):   #初始yaml读取配置文件
        self.disk_config = YamlReader(YamlPath().get_disk_yaml_file()).yaml_data()
        self.win_config = YamlReader(YamlPath().get_win_yaml_file()).yaml_data()

    def get_dirver_disk(self):
        return self.disk_config['MapDisk']

    def get_win_yaml(self):
        return self.win_config

if __name__ == '__main__':
    #print(ConfigYaml().get_win_yaml())
    pass

Map_disk.py 用例执行脚本

class MAPPing:
    #定义检查映射磁盘的列表
    # ConfigYaml().get_dirver_disk()
    def Maps_disk(self):
        #遍历映射列表,对每个映射进行检查和断开操作
        for map_didk in ConfigYaml().get_dirver_disk():
            if map_didk['dirver_disk'] in subprocess.check_output("net use",shell=True).decode("cp850"): #执行net use命令查看映射是否存在  -cp850
                os.system('net use %s /del /y' % map_didk['dirver_disk'])  # 删除映射盘
            if map_didk["user"] == None or map_didk["password"] ==None:
                os.system(f'net use {map_didk["dirver_disk"]} {map_didk["map_path"]}')
                print(f'成功映射驱动器{map_didk["dirver_disk"]} {map_didk["map_path"]}')
            else:
                os.system(f'net use {map_didk["dirver_disk"]} {map_didk["map_path"]} /user:{map_didk["user"]} {map_didk["password"]}')
                print(f'成功映射驱动器{map_didk["dirver_disk"]} {map_didk["map_path"]}')

if __name__ == '__main__':
    pass

util_yaml.py

class YamlReader:
    #初始化,判断文件是否存在
    def __init__(self,yaml_file):
        if os.path.exists(yaml_file):
            self.yaml_file = yaml_file
        else:
            raise FileNotFoundError("yaml文件不存在")
        self._data = None
        self._data_all = None

    def yaml_data(self):  #yaml文件读取 --单个文档读取
        #第一次调用data,读取yaml文档,如果不是,直接返回之前保存的数据
        if not self._data:
            with open(self.yaml_file,'rb') as f:
                self._data = yaml.safe_load(f)
        return self._data

    def yaml_data_all(self):  #多个文档的读取
        if not self._data_all:
            with open(self.yaml_file,'rb') as f:
                self._data_all = yaml.safe_load_all(f)
        return self._data_all
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

经历一个春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值