焦点!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 osimport 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 osfrom Public_Utils.util_yaml import YamlReaderclass 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_fileclass 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_configif __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
关键词:
上一篇:每日速读!王欣瑜与谢淑薇“新海峡组合”法网女双夺冠,成大满贯首冠
下一篇:最后一页
- 个人护理小家电市场结构迎变局 新兴渠道规模不容小觑
- 广州科技活动周进入预热 明日正式启动300多场主题活动接踵而来
- 深化重点领域信用建设 广州正式出台新型监管机制实施方案
- 女童不慎掉入20米深井 18岁小姨三次下井成功营救
- 西安3个区域12月28日起每日开展全员核酸 官方提倡民众居家健身
- 浙江乐清一核酸检测结果异常人员 复采复检为阴性
- 浙江本轮疫情报告确诊病例490例 提倡“双节”非必要不出省
- 西安警方通报6起涉疫违法案件
- 西安新一轮核酸筛查日检测能力达160万管
- 西安市累计报告本土确诊病例811例
-
乐平京东代运营_提升电商销售的有效途径
随着电商行业的快速发展,越来越多的企业开始进入电商领域。然而,电商
-
卡盟刷钻是什么原理_卡盟刷钻
1、首先如果你不知道卡钻代码就去找卡盟如果知道的话就别找卡盟了自己
-
松阳县气象台发布雷电黄色预警【Ⅲ级/较重】【2023-06-11】_天天日报
松阳县气象台2023年06月11日18时35分发布雷电黄色预警信号:受对流云团
-
诈骗罪量刑标准的司法解释
《最高人民法院、最高人民检察院关于办理诈骗刑事案件具体应用法律若干
-
天天视点!广汇汽车与工行江西省分行签署战略合作协议
6月9日,广汇汽车与工商银行江西省分行签署战略合作协议。广汇汽车副总
-
当前时讯:河池365_hc365
1、按照国家的劳动法,你们是有假放的。2、但是有一些地方还不能放,特
-
2023高考今日落幕,多地公布志愿填报时间 速讯
10日,2023全国高考将全部落幕,目前,全国多地陆续公布志愿填报时间。
-
2023高考今日落幕,多地公布志愿填报时间|天天新动态
10日,2023全国高考将全部落幕,目前,全国多地陆续公布志愿填报时间。
-
锦龙股份再抛定增计划,公司实控人杨志茂拟以现金全额认购2.64亿股|天天播资讯
锦龙股份的定增计划又迎来新变化。6月9日晚,锦龙股份发布了第九届监事
-
光线传媒王长田:AI有可能让动画电影制作效率提升30%-全球热推荐
上证报中国证券网讯(记者杨翔菲)6月10日上午,第二十五届上海国际电
X 关闭
焦点!Python对单个多个win机器磁盘、共享文件夹操作
每日速读!王欣瑜与谢淑薇“新海峡组合”法网女双夺冠,成大满贯首冠
2022年度“武汉最美退役军人”候选人名单公布|今日快讯
一个病字旁一个且_一个病字旁一个且是什么字 环球速递
百事通!FSD完全版将在上海试点?特斯拉中国回应:不实消息
X 关闭
焦点讯息:水发燃气董秘回复:根据《上海证券交易所股票上市规则》的规定
西安警方完成研考安保工作 共出动警力逾1.3万人次
得知西安疫情防控“升级” 男子夜骑共享单车回咸阳淳化
中国医生将任SIU主席背后:从追随者同行者到引领者
海南省通报政法队伍教育整顿成果