前提:已经有_p2.py文件(通常是别人实现的,自己没有.proto文件,但需要修改)
from logPrt import logPrt
import message_pb2
'''
TYPE_DOUBLE = 1
TYPE_FLOAT = 2
TYPE_INT64 = 3
TYPE_UINT64 = 4
TYPE_INT32 = 5
TYPE_FIXED64 = 6
TYPE_FIXED32 = 7
TYPE_BOOL = 8
TYPE_STRING = 9
TYPE_GROUP = 10
TYPE_MESSAGE = 11
'''
typeStr = ['double','float','int64','uint64','int32','fixed64','fixed32','bool','string','group','message','bytes']
def printSubStructure(vs,ts):
#vs = subObj.DESCRIPTOR
logPrt.logWarn(f"{ts}message {vs.name}" + '{')
for typevo in vs.nested_types:
printSubStructure(typevo,ts+'\t')
for field in vs.fields:
if hasattr(field,'index'):
if hasattr(field,'name') and hasattr(field,'type'):
pstr = f'{ts}\t'
if field.label == 3:
pstr += 'repeated '
if field.message_type == None:
pstr += f"{typeStr[field.type-1]} {field.name} = {field.index + 1};"
else:
typeObj = field.message_type
pstr += f"{typeObj.name} {field.name} = {field.index + 1};"
logPrt.logWarn(pstr)
else:
printSubStructure(field,ts+'\t')
logPrt.logWarn(ts+'}')
def print_class_structure(module):
for name, obj in module.__dict__.items():
if not hasattr(obj,'DESCRIPTOR'):
continue
logPrt.logCyan(f"message {name}" + '{')
if hasattr(obj,'__dict__'):
vars = obj.__dict__.items()
for s,o in vars:
if hasattr(o,'DESCRIPTOR'):
descriptor = o.DESCRIPTOR
if hasattr(descriptor,'index'):
pstr = '\t'
if descriptor.label == 3:
pstr += 'repeated '
if hasattr(descriptor,'name') and hasattr(descriptor,'type'):
if descriptor.message_type == None:
pstr += f"{typeStr[descriptor.type-1]} {descriptor.name} = {descriptor.index + 1};"
else:
typeObj = descriptor.message_type
pstr += f"{typeObj.name} {descriptor.name} = {descriptor.index + 1};"
logPrt.logMred(pstr)
else:
printSubStructure(o.DESCRIPTOR,'\t')
logPrt.logCyan('}')
print()
print_class_structure(message_pb2)
注意:
logPrt 下面的方法就当是print就行了,比如代码中logPrt.logMred->换成print就行了
message_pb2就是由message.proto转化而来的python文件