Есть ли способ создать базу данных Understand (из Scitools) внутри скрипта Python?

Я нахожусь в процессе написания скрипта Python, чтобы определить проекты, которые ссылаются на данный проект и сталкивались с Understand от Scitools. После исследования API-интерфейса Understands 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)

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

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

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
Другие вопросы по тегам