1ba991379Sopenharmony_ci# encoding=utf-8
2ba991379Sopenharmony_ci
3ba991379Sopenharmony_ciimport os
4ba991379Sopenharmony_ciimport socket
5ba991379Sopenharmony_ciimport subprocess
6ba991379Sopenharmony_ciimport time
7ba991379Sopenharmony_ci
8ba991379Sopenharmony_cifrom util.log_info import logger
9ba991379Sopenharmony_cifrom aw.Common.Constant import *
10ba991379Sopenharmony_ci
11ba991379Sopenharmony_cidef copyFile(source_path, copy_path, size=1024 * 1024):
12ba991379Sopenharmony_ci    '''
13ba991379Sopenharmony_ci    #===================================================================================
14ba991379Sopenharmony_ci    #   @Method:        copyFile(self, source_path, copy_path, size=1024 * 1024)
15ba991379Sopenharmony_ci    #   @Precondition:  none
16ba991379Sopenharmony_ci    #   @Func:          拷贝文件
17ba991379Sopenharmony_ci    #   @PostStatus:    none
18ba991379Sopenharmony_ci    #   @Param:         source_path:资源文件路径
19ba991379Sopenharmony_ci    #                   copy_path:文件下载到本地的文件夹路径
20ba991379Sopenharmony_ci    #                   size:字节数的大小
21ba991379Sopenharmony_ci    #   @eg:            downloadByBitComet("xxxx", "D:\\local\\image")
22ba991379Sopenharmony_ci    #   @return:        True or Flase
23ba991379Sopenharmony_ci    #===================================================================================
24ba991379Sopenharmony_ci    '''
25ba991379Sopenharmony_ci    if not os.path.isfile(source_path):
26ba991379Sopenharmony_ci        raise Exception("%s is not file" % source_path)
27ba991379Sopenharmony_ci    if os.path.isdir(copy_path):
28ba991379Sopenharmony_ci        copy_path = os.path.join(copy_path, os.path.basename(source_path))
29ba991379Sopenharmony_ci    try:
30ba991379Sopenharmony_ci        with open(source_path, 'rb') as fr, open(copy_path, 'wb') as fw:
31ba991379Sopenharmony_ci            while(True):
32ba991379Sopenharmony_ci                data = fr.read(size)
33ba991379Sopenharmony_ci                if not data:
34ba991379Sopenharmony_ci                    break
35ba991379Sopenharmony_ci                fw.write(data)
36ba991379Sopenharmony_ci    except:
37ba991379Sopenharmony_ci        raise Exception("Copy %s to %s failed" % (source_path, copy_path))
38ba991379Sopenharmony_ci
39ba991379Sopenharmony_ci
40ba991379Sopenharmony_cidef copyDirectory(src_dir, dst_dir):
41ba991379Sopenharmony_ci    # copy everything under <src_dir> into <dst_dir>
42ba991379Sopenharmony_ci    if not os.path.isdir(src_dir):
43ba991379Sopenharmony_ci        return False
44ba991379Sopenharmony_ci
45ba991379Sopenharmony_ci    if not os.path.isdir(dst_dir):
46ba991379Sopenharmony_ci        try:
47ba991379Sopenharmony_ci            os.makedirs(dst_dir)
48ba991379Sopenharmony_ci        except Exception as e:
49ba991379Sopenharmony_ci            logger.error(e)
50ba991379Sopenharmony_ci
51ba991379Sopenharmony_ci    time.sleep(1)
52ba991379Sopenharmony_ci    if not os.path.isdir(dst_dir):
53ba991379Sopenharmony_ci        return False
54ba991379Sopenharmony_ci
55ba991379Sopenharmony_ci    logger.info("copy %s to %s" % (src_dir, dst_dir))
56ba991379Sopenharmony_ci    for item in os.listdir(src_dir):
57ba991379Sopenharmony_ci        file_path = os.path.join(src_dir, item)
58ba991379Sopenharmony_ci        child_path = os.path.join(dst_dir, item)
59ba991379Sopenharmony_ci        if os.path.isfile(file_path):
60ba991379Sopenharmony_ci            logger.info("copy %s to %s" % (file_path, child_path))
61ba991379Sopenharmony_ci            copyFile(file_path, child_path)
62ba991379Sopenharmony_ci            if not os.path.isfile(child_path):
63ba991379Sopenharmony_ci                logger.error("Copy %s to %s failed" % (file_path, child_path))
64ba991379Sopenharmony_ci                return False
65ba991379Sopenharmony_ci        else:
66ba991379Sopenharmony_ci            if os.path.isdir(file_path):
67ba991379Sopenharmony_ci                ret = copyDirectory(file_path, child_path)
68ba991379Sopenharmony_ci                if not ret:
69ba991379Sopenharmony_ci                    return False
70ba991379Sopenharmony_ci    return True
71ba991379Sopenharmony_ci
72ba991379Sopenharmony_cidef getHostIp():
73ba991379Sopenharmony_ci    """
74ba991379Sopenharmony_ci    #===================================================================================
75ba991379Sopenharmony_ci    #   @Method:        getHostIp()
76ba991379Sopenharmony_ci    #   @Precondition:  none
77ba991379Sopenharmony_ci    #   @Func:          返回机器ip
78ba991379Sopenharmony_ci    #   @PostStatus:    none
79ba991379Sopenharmony_ci    #   @eg:            getHostIp()
80ba991379Sopenharmony_ci    #   @return:        ip
81ba991379Sopenharmony_ci    #===================================================================================
82ba991379Sopenharmony_ci    """
83ba991379Sopenharmony_ci    ip = ""
84ba991379Sopenharmony_ci    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
85ba991379Sopenharmony_ci    try:
86ba991379Sopenharmony_ci        s.connect(('8.8.8.8', 80))
87ba991379Sopenharmony_ci        ip = s.getsockname()[0]
88ba991379Sopenharmony_ci    except OSError as e:
89ba991379Sopenharmony_ci        print(e)
90ba991379Sopenharmony_ci    finally:
91ba991379Sopenharmony_ci        s.close()
92ba991379Sopenharmony_ci        return ip
93ba991379Sopenharmony_ci
94ba991379Sopenharmony_cidef getFileName(path, suffix_name):
95ba991379Sopenharmony_ci    '''
96ba991379Sopenharmony_ci    #===================================================================================
97ba991379Sopenharmony_ci    #   @Method:        getFileName(path, suffix_name)
98ba991379Sopenharmony_ci    #   @Precondition:  none
99ba991379Sopenharmony_ci    #   @Func:          find the flash script in version path or root path
100ba991379Sopenharmony_ci    #   @PostStatus:
101ba991379Sopenharmony_ci    #   @Param:         path, version path or root path
102ba991379Sopenharmony_ci    #   @Example:       getFileName(path, suffix_name)
103ba991379Sopenharmony_ci    #   @Author:        zwx205888
104ba991379Sopenharmony_ci    #   @ModifyRecord:  none
105ba991379Sopenharmony_ci    #===================================================================================
106ba991379Sopenharmony_ci    '''
107ba991379Sopenharmony_ci    logger.info("get %s in %s" % (suffix_name, path))
108ba991379Sopenharmony_ci    import glob
109ba991379Sopenharmony_ci    script_files = glob.glob(os.path.join(path, "*" + suffix_name))
110ba991379Sopenharmony_ci    logger.info("real file is : %s " % script_files)
111ba991379Sopenharmony_ci    if len(script_files) != 1:
112ba991379Sopenharmony_ci        logger.error("more than one %s file or has No %s file" % (suffix_name, suffix_name))
113ba991379Sopenharmony_ci        return False
114ba991379Sopenharmony_ci
115ba991379Sopenharmony_ci    return script_files[0]
116ba991379Sopenharmony_ci
117ba991379Sopenharmony_cidef subProcessPopen(cmd, outlog_enable=True, errlog_enable=True):
118ba991379Sopenharmony_ci    """
119ba991379Sopenharmony_ci    @Method:          subProcessPopen()
120ba991379Sopenharmony_ci    @Precondition:    none
121ba991379Sopenharmony_ci    @Func:            excute the command
122ba991379Sopenharmony_ci    @PostStatus:      none
123ba991379Sopenharmony_ci    @Param:           cmd,the command that will be excuted
124ba991379Sopenharmony_ci    @Example:         subProcessPopen("RD /Q /F D:\test")
125ba991379Sopenharmony_ci    @ModifyRecord:    none
126ba991379Sopenharmony_ci    """
127ba991379Sopenharmony_ci
128ba991379Sopenharmony_ci    ret_dict = {}
129ba991379Sopenharmony_ci    number = 3
130ba991379Sopenharmony_ci
131ba991379Sopenharmony_ci    for i in range (number):
132ba991379Sopenharmony_ci        p1 = subprocess.Popen(cmd,
133ba991379Sopenharmony_ci                                 stdin=subprocess.PIPE,
134ba991379Sopenharmony_ci                                 stdout=subprocess.PIPE,
135ba991379Sopenharmony_ci                                 stderr=subprocess.PIPE,
136ba991379Sopenharmony_ci                                 shell=True)
137ba991379Sopenharmony_ci        out, err = p1.communicate()
138ba991379Sopenharmony_ci        if 0 != p1.returncode:
139ba991379Sopenharmony_ci            if True == outlog_enable:
140ba991379Sopenharmony_ci                logger.error(err)
141ba991379Sopenharmony_ci                logger.error("%s fail" % cmd)
142ba991379Sopenharmony_ci            ret = False
143ba991379Sopenharmony_ci        else:
144ba991379Sopenharmony_ci            ret = True
145ba991379Sopenharmony_ci        ret_dict["ret"] = ret
146ba991379Sopenharmony_ci        ret_dict["out"] = out.strip()
147ba991379Sopenharmony_ci        ret_dict["err"] = err.strip()
148ba991379Sopenharmony_ci        if outlog_enable:
149ba991379Sopenharmony_ci            logger.info("ret is %s" % ret)
150ba991379Sopenharmony_ci            logger.info(out.strip())
151ba991379Sopenharmony_ci        if errlog_enable:
152ba991379Sopenharmony_ci            logger.info(err.strip())
153ba991379Sopenharmony_ci        if ret_dict["out"] or ret_dict["err"]:
154ba991379Sopenharmony_ci            break
155ba991379Sopenharmony_ci    return ret_dict