#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#×÷Õß : eggxp  
 | 
  
 | 
import os  
 | 
import struct  
 | 
import string  
 | 
import math  
 | 
import datetime  
 | 
import subprocess  
 | 
import traceback  
 | 
import base64  
 | 
  
 | 
BASE64_ENCODE_CNT = 3  
 | 
XOR_KEY = 151  
 | 
def Decrypt(psw):  
 | 
    ret = ""  
 | 
    try:  
 | 
        for i in range(0,BASE64_ENCODE_CNT):  
 | 
            psw = base64.decodestring(psw)  
 | 
    except:  
 | 
        ret = traceback.format_exc()  
 | 
        return False,ret  
 | 
      
 | 
    for i in psw:  
 | 
        ret += chr(ord(i)^XOR_KEY)  
 | 
    return True, ret  
 | 
  
 | 
#Ö´ÐÐcmdÖ¸Áî  
 | 
def RunCmd(curCmd):  
 | 
    pipe = subprocess.Popen(['cmd', ""], shell = False,  
 | 
                                 stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE)  
 | 
    pipe.stdin.write('%s\n'%curCmd)  
 | 
    pipe.stdin.close()  
 | 
    retStr = pipe.stdout.read()  
 | 
    retStr += pipe.stderr.read()  
 | 
    print retStr  
 | 
    return retStr  
 | 
  
 | 
  
 | 
#È¡µÃ´úÂëÖÐÕæÊµµÄ×Ö·û´®£¨Èç²ÎÊýsrcStrÊÇ'\n',»áµÃµ½»Ø³µ·û£©  
 | 
def GetCodeStr(srcStr):  
 | 
    desStr = srcStr.replace("'", "\\'")  
 | 
    cmd = "desStr='" + desStr + "'"  
 | 
    exec(cmd)  
 | 
    return desStr   
 | 
  
 | 
  
 | 
#pythonдÎļþ:  
 | 
#    f = file('c:\\fuck.txt', 'a')  
 | 
#    f.write(mapObsData)  
 | 
  
 | 
#µÈ´ýÊäÈë: raw_input()  
 | 
  
 | 
#´´½¨Socket  
 | 
#s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)  
 | 
#s.bind(('192.168.0.81', 6112))  
 | 
#s.listen(1)  
 | 
  
 | 
#»ñµÃ×ÓĿ¼:  
 | 
#os.path.abspath  
 | 
  
 | 
#µÈ´ýÊäÈë:  
 | 
#raw_input()  
 | 
  
 | 
#µÃµ½±¾Ä¿Â¼:  
 | 
#os.getcwd()  
 | 
  
 | 
#µÃµ½²ÎÊý:  
 | 
#os.sys.argv  
 | 
  
 | 
#µÃµ½python·¾¶  
 | 
#os.sys.executable  
 | 
  
 | 
#ÔËÐÐÍⲿÎļþ/½áÊøÍⲿÎļþ  
 | 
#processID = os.spawnl(os.P_NOWAIT, pythonPath, '-p', os.path.join(curPath, 'test.py'))  
 | 
#win32api.TerminateProcess(processID, 0)  
 | 
  
 | 
  
 | 
#pythonµÄ¶ÁÈ¡/дÈë¿â  
 | 
  
 | 
#------------------------¶ÁÈ¡   
 | 
def ReadBYTE(buf, pos):  
 | 
    curValue = struct.unpack_from('B', buf, pos)  
 | 
    pos += 1  
 | 
    return curValue[0], pos  
 | 
  
 | 
def ReadWORD(buf, pos):  
 | 
    curValue = struct.unpack_from('H', buf, pos)  
 | 
    pos += 2    
 | 
    return curValue[0], pos  
 | 
  
 | 
def ReadDWORD(buf, pos):  
 | 
    curValue = struct.unpack_from('I', buf, pos)    
 | 
    pos += 4  
 | 
    return curValue[0], pos  
 | 
  
 | 
def ReadFloat(buf, pos):  
 | 
    curValue = struct.unpack_from('f', buf, pos)    
 | 
    pos += 4  
 | 
    return curValue[0], pos  
 | 
  
 | 
def ReadDouble(buf, pos):  
 | 
    curValue = struct.unpack_from('d', buf, pos)    
 | 
    pos += 8  
 | 
    return curValue[0], pos  
 | 
  
 | 
def ReadString(buf, pos, _len):  
 | 
    curValue = struct.unpack_from('%ds'%_len, buf, pos)  
 | 
    pos += _len    
 | 
    return curValue[0], pos  
 | 
  
 | 
  
 | 
#----------------------дÈë  
 | 
def WriteBYTE(buf, value):  
 | 
    buf += struct.pack('B', value)  
 | 
    return buf  
 | 
  
 | 
def WriteWORD(buf, value):  
 | 
    buf += struct.pack('H', value)  
 | 
    return buf  
 | 
  
 | 
def WriteDWORD(buf, value):  
 | 
    buf += struct.pack('I', value)  
 | 
    return buf  
 | 
  
 | 
def WriteFloat(buf, value):  
 | 
    buf += struct.pack('f', value)  
 | 
    return buf  
 | 
  
 | 
def WriteDouble(buf, value):  
 | 
    buf += struct.pack('d', value)  
 | 
    return buf  
 | 
  
 | 
def WriteString(buf, len, value):  
 | 
    buf += struct.pack('%ds'%len, value)  
 | 
    return buf  
 | 
  
 | 
def GetDistance(srcX, srcY, destX, destY):  
 | 
    return math.sqrt(pow(srcX - destX, 2) + pow(srcY - destY, 2))  
 | 
      
 | 
def MovePos(srcX, srcY, destX, destY, curMoveDist):  
 | 
    if curMoveDist == 0:  
 | 
        return  srcX, srcY  
 | 
      
 | 
    totalDist = GetDistance(srcX, srcY, destX, destY)  
 | 
    if totalDist == 0:  
 | 
        return  srcX, srcY  
 | 
      
 | 
    resultX = curMoveDist / float(totalDist) * (destX - srcX) + srcX  
 | 
    resultY = curMoveDist / float(totalDist) * (destY - srcY) + srcY  
 | 
    return resultX, resultY   
 | 
      
 | 
  
 | 
##²âÊÔ´úÂë:  
 | 
#strs = 'ÃÀÏãÊÇÖí'  
 | 
#buf = ''  
 | 
#buf = WriteString(buf, len(strs), strs)  
 | 
#value, pos = ReadString(buf, 0, len(strs))  
 | 
#print value  
 | 
  
 | 
#»ñµÃµ±Ç°ÏµÍ³Ê±¼ä  
 | 
def GetCurrentDataTimeStr():  
 | 
    curTime = datetime.datetime.today()  
 | 
    curTimeStr = str(curTime)  
 | 
    curTimeStr = curTimeStr.split(".")[0]  
 | 
    return curTimeStr  
 | 
  
 | 
#»ñµÃϵͳʱ¼ä(²ÎÊý -> Ê±¼äÁбí)  
 | 
def GetDateTimeByStr(timeStr):  
 | 
    timeStr = timeStr.split(".")[0]  
 | 
    return  datetime.datetime.strptime(timeStr, "%Y-%m-%d %H:%M:%S")  
 | 
      
 | 
      
 | 
      
 | 
#×Ö·û´®×ª»»ÎªÕûÐÍ, Èç¹û²»ÄÜת»», ·µ»ØÄ¬ÈÏÖµ  
 | 
def ToIntDef(input, defValue = 0):  
 | 
    try:  
 | 
        result = int(input)  
 | 
        return result  
 | 
    except ValueError:  
 | 
        return defValue  
 | 
      
 | 
#16½øÖÆÑÕɫת»»  
 | 
#"#FFFFFF"--"255,255,255"  
 | 
def HcToSc(h):  
 | 
    h="0x"+h[1:7]  
 | 
    red=string.atoi(h[:2]+h[2:4], base=16)  
 | 
    green=string.atoi(h[:2]+h[4:6], base=16)  
 | 
    blue=string.atoi(h[:2]+h[6:8], base=16)  
 | 
    cStr=str(red)+","+str(green)+","+str(blue)  
 | 
    return cStr  
 | 
  
 | 
#"255,255,255"--"#FFFFFF"  
 | 
def ScToHc(s):  
 | 
    red=hex(string.atoi(s.split(",")[0]))[2:]  
 | 
    green=hex(string.atoi(s.split(",")[1]))[2:]  
 | 
    blue=hex(string.atoi(s.split(",")[2]))[2:]  
 | 
    hStr="#"+str(red+green+blue)  
 | 
    return hStr  
 | 
  
 | 
#16½øÖÆ×ª»»  
 | 
#"0xFFFFFF"--"255,255,255"  
 | 
def HdToSd(h):  
 | 
    red=string.atoi(h[0:2]+h[2:4], base=16)  
 | 
    green=string.atoi(h[0:2]+h[4:6], base=16)  
 | 
    blue=string.atoi(h[0:2]+h[6:8], base=16)  
 | 
    cStr=str(red)+","+str(green)+","+str(blue)  
 | 
    return cStr  
 | 
  
 | 
#"255,255,255"--"0xFFFFFF"  
 | 
def SdToHd(s):  
 | 
    red=hex(string.atoi(s.split(",")[0]))[2:]  
 | 
    green=hex(string.atoi(s.split(",")[1]))[2:]  
 | 
    blue=hex(string.atoi(s.split(",")[2]))[2:]  
 | 
    hStr="0x"+str(red+green+blue)  
 | 
    return hStr  
 | 
  
 | 
#Ìáʾ³ýÁã´íÎóµÄEVAL  
 | 
def SafeEval(value):  
 | 
    try:  
 | 
        return eval(value)  
 | 
    except ZeroDivisionError:  
 | 
        return "Division is Zero"  
 | 
      
 | 
def GetPercent(value1, value2):  
 | 
    if value2 == 0:  
 | 
        return 0  
 | 
    return int(float(value1) / float(value2) * 100)  
 | 
  
 | 
##Éú³ÉÖ¸¶¨Îļþ£¨Èçpar£ºr'E:\¿ª·¢°æ±¾\Data\logo\formName1.log'£©  
 | 
#def MakeAppointFile(par):  
 | 
#    dir = os.path.dirname(par)  # »ñµÃÎļþĿ¼  
 | 
#    os.makedirs(dir)  # ´´½¨¶à¼¶Ä¿Â¼  
 | 
#    file = open(os.path.basename(par),'w')  
 | 
#    file.close()  
 | 
#  
 | 
##ÔÚÖ¸¶¨Ä¿Â¼¸ù¾Ýµ±Ç°Ê±¼äÉú³ÉÐÂĿ¼£¨Èçpar£ºr'E:\¿ª·¢°æ±¾\Data\logo'£©  
 | 
#def MakeCurTimeDir(par):  
 | 
#    if not os.path.exists(par):  # ´«½øÀ´µÄĿ¼²»´æÔÚ  
 | 
#        return  
 | 
#    path=par+'\\'+str(datetime.datetime.today()).split()[0]  
 | 
#    if not os.path.exists(path):  # Îļþ¼ÐÊÇ·ñ´æÔÚ£¬²»´æÔÚÔò´´½¨  
 | 
#        os.mkdir(path)  # ´´½¨Îļþ¼Ð  
 | 
          
 | 
#Éú³ÉÖ¸¶¨Ä¿Â¼£¨Èçpar£ºr'E:\¿ª·¢°æ±¾\Data\logo'£©  
 | 
def MakeAppointDir(par):  
 | 
    if not isinstance(par,str):  
 | 
        return  
 | 
    pathList=par.split('\\')  
 | 
    path=pathList[0]  
 | 
    for i in range(1,len(pathList)):  
 | 
        path+='\\'+pathList[i]  
 | 
        if not os.path.exists(path):  # Îļþ¼ÐÊÇ·ñ´æÔÚ£¬²»´æÔÚÔò´´½¨  
 | 
            os.mkdir(path)  # ´´½¨Îļþ¼Ð  
 | 
                  
 | 
#Éú³ÉÖ¸¶¨Îļþ£¨Èçpar£ºr'E:\¿ª·¢°æ±¾\Data\logo\formName1.log'£©  
 | 
def MakeAppointFile(par):  
 | 
    if not isinstance(par,str):  
 | 
        return  
 | 
    pathList=par.split('\\')  
 | 
    path=pathList[0]  
 | 
    for i in range(1,len(pathList)):  
 | 
        path+='\\'+pathList[i]  
 | 
        if i==len(pathList)-1:  
 | 
            file=open(path,'w')  
 | 
            file.close()  
 | 
        else:  
 | 
            if not os.path.exists(path):  # Îļþ¼ÐÊÇ·ñ´æÔÚ£¬²»´æÔÚÔò´´½¨  
 | 
                os.mkdir(path)  # ´´½¨Îļþ¼Ð  
 | 
  
 | 
#ÔÚÖ¸¶¨Ä¿Â¼¸ù¾Ýµ±Ç°Ê±¼äÉú³ÉÐÂĿ¼£¨Èçpar£ºr'E:\¿ª·¢°æ±¾\Data\logo'£©  
 | 
def MakeCurTimeDir(par):  
 | 
    if not os.path.exists(par):  # ´«½øÀ´µÄĿ¼²»´æÔÚ  
 | 
        return  
 | 
    path=par+'\\'+str(datetime.datetime.today()).split()[0]  
 | 
    if not os.path.exists(path):  # Îļþ¼ÐÊÇ·ñ´æÔÚ£¬²»´æÔÚÔò´´½¨  
 | 
        os.mkdir(path)  # ´´½¨Îļþ¼Ð  
 | 
  
 | 
#µÃµ½Ìæ»»ºóµÄ×Ö·û´®£¨²ÎÊý£ºstringÊÇÐèÒªÌæ»»µÄ×Ö·û´®£»varlistΪ²»¶¨²Î£¬ÎªÌæ»»ÄÚÈÝ£©  
 | 
def GetReplaceString(string,*varlist):  
 | 
    if '%' not in string:  
 | 
        return string  
 | 
    repalceCount = len(varlist)  # Ìæ»»´ÎÊý  
 | 
    newStr = string  
 | 
    if '%%' in string:  
 | 
        newStr = string.replace('%%','')  # È¥³ý×Ö·û´®strÄÚµÄ'%%'  
 | 
    needReplaceCount = newStr.count('%')  # ×Ö·û´®newStrÄÚµÄ'%'¸öÊý,¼´ÐèÒªÌæ»»µÄ´ÎÊý  
 | 
    if repalceCount < needReplaceCount:  
 | 
        tempList = list(varlist)  
 | 
        for i in range(needReplaceCount-repalceCount):  
 | 
            tempList.append(0)  
 | 
        replaceTuple= tuple(tempList)  
 | 
        #¸æËßµ÷ÓÃÕߣ¬²ÎÊý´«ÉÙÁË  
 | 
        return 'func:GetReplaceString();error:the parameter lack'  
 | 
#        return string%replaceTuple  
 | 
          
 | 
    replaceTuple = tuple(varlist[:needReplaceCount])  
 | 
    return string%replaceTuple  
 | 
  
 | 
def EncodingToUnicode(srcEncoding, input):  
 | 
    try:  
 | 
        result = unicode(input, srcEncoding)    #translate to utf-8  
 | 
    except:  
 | 
#        mylog.error('encode error!srcEncoding = %s input = %s'%(srcEncoding, repr(input)))  
 | 
        return False, None  
 | 
    return True, result  
 | 
  
 | 
def UnicodeToEncoding(dstEncoding, input):  
 | 
    try:  
 | 
        result = input.encode(dstEncoding)  
 | 
    except:  
 | 
#        mylog.error('encode error!dstEncoding = %s input = %s'%(dstEncoding, repr(input)))  
 | 
        return False, None  
 | 
    return True, result 
 |