2016-11-09 8 views
2

Я в процессе написания сценария python для определения проектов, которые ссылаются на данный проект, и столкнулись с пониманием от Scitools. После исследования API подпрограмм Understands Python мне кажется, что мне нужно «открыть» БД, чтобы выполнять любые команды и обнаруживать все, что нужно для обнаружения данного проекта. Например, когда я выполнить это:Есть ли способ создать базу данных Understand (из Scitools) в скрипте python?

example.py
import understand 
import sys 

def sortedEntities(db): 
    for ent in sorted(db.ents(),key= lambda ent: ent.name()): 
    print (ent.name()," [",ent.kindname(),"]",sep="",end="\n") 

if __name__ == '__main__': 
    # Open Database 
    args = sys.argv 
    db = understand.open(args[1]) 
    sortedEntities(db) 

я столкнулся с understand.UnderstandError: ошибка DBCorrupt, потому что я не подавая в .udb файл и вместо подачи в файле .csproj. Я предполагаю, что я должен создать этот .udb-файл, который является файлом db.

Я стараюсь избегать использования GUI подпрограмм и автоматизировать этот статический инструмент в скрипте python. Есть ли способ создать БД из данного проекта, а затем выполнить множество команд, которые может предложить. Любые указания будут очень оценены!

ответ

1

вы можете использовать утилиту командной строки для этого udb_path где UDB создается, language является Java/Python/C#/или независимо от того, project_root является корневым путем вашего проекта вы хотите запустить понять на.

@staticmethod 
def create_udb(udb_path, language, project_root): 
    try: 
     output = subprocess.check_output(
      "und create -db {udb_path} -languages {lang}".format(udb_path=udb_path, lang=language), 
      shell=True) 
     logging.info(output) 
     output = subprocess.check_output("und add -db {udb_path} {project}".format(
      udb_path=udb_path, project=project_root), shell=True) 
     logging.info(output) 
    except subprocess.CalledProcessError as e: 
     logging.exception(e.output) 
     logging.fatal("udb creation failed") 
     raise Exception