亚洲ww无码ww专区1234_亚洲AV综合色区无码三区30p_丰满二级精品一区_美女黄频视频大全免费的正片_久久综合九色综合网站

焦點(diǎn)!Python對(duì)單個(gè)多個(gè)win機(jī)器磁盤、共享文件夾操作

2023-06-12 16:13:18    來(lái)源:云中隨心而記

解決在win機(jī)器22,445端口無(wú)法訪問(wèn)的前提下: 連接多個(gè)win機(jī)器磁盤映射或者訪問(wèn)共享文件夾問(wèn)題


(資料圖片)

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

導(dǎo)入os和subprocess模塊。

1.使用subprocess.run執(zhí)行net use命令查看該映射是否存在。

2.如果存在,則使用subprocess.run執(zhí)行net use /delete命令斷開(kāi)該映射。

3.如果不存在,則執(zhí)行net use命令映射該磁盤。

4.如果需要用戶名密碼,則要求用戶輸入,然后使用subprocess.run執(zhí)行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": ""}]# 遍歷映射列表,對(duì)每個(gè)映射進(jìn)行檢查和斷開(kāi)操作for mapping in drive_mappings:    # 執(zhí)行net use命令查看該映射是否存在    result = subprocess.run(["net", "use", mapping["drive"]], capture_output=True)        # 如果存在,則執(zhí)行net use /delete命令斷開(kāi)該映射, 如果gbk打印結(jié)果有問(wèn)題,建議用cp850    if "OK" in result.stdout.decode("gbk"):        os.system(f"net use {mapping["drive"]} /delete /yes")print(f"斷開(kāi)映射 {mapping["drive"]}")    # 如果不存在,則執(zhí)行net use命令映射該磁盤    else:        # 判斷是否需要輸入用戶名密碼        if mapping["user"]:            password = input(f"請(qǐng)輸入 {mapping["drive"]} 的密碼:")            if password:                mapping["password"] = password            else:                print("密碼不能為空!")                continue                # 執(zhí)行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"]}")

在這個(gè)示例中,每個(gè)映射都被表示成一個(gè)包含映射驅(qū)動(dòng)器,網(wǎng)絡(luò)共享路徑,用戶名和密碼的字典。在遍歷映射列表時(shí),我們首先使用subprocess.run執(zhí)行net use命令來(lái)檢查是否存在映射。如果映射存在,我們使用os.system執(zhí)行net use /delete命令來(lái)斷開(kāi)該映射。如果映射不存在,我們首先檢查映射是否需要用戶名和密碼。如果需要,我們提示用戶輸入密碼,然后再使用os.system執(zhí)行net use命令來(lái)映射磁盤。如果不需要密碼,則直接使用os.system映射磁盤。



方法二:調(diào)用封裝函數(shù)

將腳本實(shí)現(xiàn)封裝后,只需要在MapDisk.yaml文件中寫用例即可,此后執(zhí)行Map_disk.py腳本即可實(shí)現(xiàn)win磁盤的一些映射操作

目錄介紹:

腳本附上:

yaml填寫需要映射的磁盤 和 共享路徑即可 用戶名密碼有則填寫,無(wú)則忽略

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腳本: 配置讀取信息,方便調(diào)用

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 用例執(zhí)行腳本

class MAPPing:    #定義檢查映射磁盤的列表    # ConfigYaml().get_dirver_disk()    def Maps_disk(self):        #遍歷映射列表,對(duì)每個(gè)映射進(jìn)行檢查和斷開(kāi)操作        for map_didk in ConfigYaml().get_dirver_disk():            if map_didk["dirver_disk"] in subprocess.check_output("net use",shell=True).decode("cp850"): #執(zhí)行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"成功映射驅(qū)動(dòng)器{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"成功映射驅(qū)動(dòng)器{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文件讀取 --單個(gè)文檔讀取        #第一次調(diào)用data,讀取yaml文檔,如果不是,直接返回之前保存的數(shù)據(jù)        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):  #多個(gè)文檔的讀取        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

關(guān)鍵詞:

X 關(guān)閉

財(cái)經(jīng) 查看更多
安陽(yáng)曹操墓將于2022年5月正式對(duì)公眾開(kāi)放
時(shí)間·2021-12-29    來(lái)源·中新網(wǎng)
為什么這次寒潮南方降雪這么明顯?
時(shí)間·2021-12-29    來(lái)源·新華社
山西絳縣6名失蹤者全部遇難 當(dāng)?shù)兀阂蚜刚{(diào)查
時(shí)間·2021-12-29    來(lái)源·中新網(wǎng)

X 關(guān)閉