字符串转换成python中exec能执行的函数

来源:互联网 发布:如何对付淘宝无良卖家 编辑:程序博客网 时间:2024/06/08 00:32
#获得格式化后python能执行的字符串    def getPYExecStr(self, strs):        if strs.find('if' + self.marked) != -1:            strs = strs[strs.find('if' + self.marked):]        backStr = ''        struct = ''        lineSpace = '    '        gradeNum = 0        isFirstStr = True        lines = strs.splitlines()        for li in lines:            li = li.strip()            if li.startswith('if' + self.marked):                backStr = self.__addStrToBackStr(struct, gradeNum, lineSpace, backStr)                isFirstStr = True                backStr +=  gradeNum * lineSpace + li.replace(self.marked, '') + ':' + os.linesep                gradeNum += 1            elif li.startswith('elif' + self.marked):                backStr = self.__addStrToBackStr(struct, gradeNum, lineSpace, backStr)                isFirstStr = True                backStr += (gradeNum - 1) * lineSpace + li.replace(self.marked, '') + ':' + os.linesep            elif li.startswith('else' + self.marked):                backStr = self.__addStrToBackStr(struct, gradeNum, lineSpace, backStr)                isFirstStr = True                backStr += (gradeNum - 1) * lineSpace + li.replace(self.marked, '') + ':' + os.linesep            elif li.startswith('endif' + self.marked):                backStr = self.__addStrToBackStr(struct, gradeNum, lineSpace, backStr)                isFirstStr = True                gradeNum -= 1            else:                if isFirstStr:                    struct = ''                    struct += "self.structStr = \"" + li + "os.linesep"                    isFirstStr = False                else:                    struct += li + "os.linesep"        backStr = self.__addStrToBackStr(struct, gradeNum, lineSpace, backStr)        return backStr    #添加字符串到BackStr中(私有方法)    def __addStrToBackStr(self, struct, gradeNum, lineSpace, backStr):        if struct:            struct = struct[:struct.rfind('os.linesep')]            backStr += gradeNum * lineSpace + struct + '"' + os.linesep        return backStr



self.marked = '$'