4

我正在编写一个 python 脚本来确定引用给定项目的项目,并且从 Scitools 遇到了理解。在对理解 Python API 进行研究之后,看来我需要“打开”一个数据库才能执行任何命令并发现关于给定项目的所有信息。例如,当我执行此操作时:

例子.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 脚本中自动化这个静态工具。有什么方法可以从给定项目创建数据库,然后执行理解必须提供的许多命令。任何指导将不胜感激!

4

1 回答 1

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
于 2017-07-05T20:14:50.513 回答