【问题标题】:Running protoc in Python subprocess在 Python 子进程中运行 protoc
【发布时间】:2022-07-27 00:44:22
【问题描述】:

我有我的.proto。文件夹workspace_directory/sub_directory/proto_files中定义的文件。

当我跑步时:

protoc --python_out=workspace_directory -I workspace_directory/sub_directory/proto_files workspace_directory/sub_directory/proto_files/*

输出的python代码是在workspace_directory/proto_files中生成的,这正是我想要的。

我的主要目标是在 Python 中将该命令作为构建脚本的一部分运行,因此我尝试使用 subprocess.run() 来实现这一目标。在 Python 中我运行:

subprocess.run(shlex.split("protoc --python_out=workspace_directory -I workspace_directory/sub_directory/proto_files workspace_directory/sub_directory/proto_files/*"))

我明白了

无法使 proto 路径相对:workspace_directory/sub_directory/proto_files/*:没有这样的文件或目录

其他一些注意事项:

  • workspace_directory 是完全限定路径。就像/home/user/workspace_directory,所以我不认为我应该有任何相对路径问题。
  • 我使用了shlex.split(),所以我可以复制/粘贴命令,以确保它尽可能准确。

在使用subprocess 模块时感觉好像遗漏了什么,但似乎看不到。

【问题讨论】:

  • 您是否正确使用shlex.splitresource
  • @Dean 是的,我相信是的。那里没有单引号,所以它是一个非常直接的拆分。我也尝试过没有shlex.split()。我发布的内容是否让您认为 shlex.split() 调用不正确?

标签: python subprocess protocol-buffers protoc


【解决方案1】:

我想你会想添加--proto_path=workspace_directory/sub_directory/proto_files

我认为您将所有内容都写成一个字符串然后拆分它会使事情复杂化。为什么不只写字符串拆分?你会避免 shlex.split'ting 错误的字符串。

我认为您通过运行 Python 解释器来输出到 protoc 会使事情复杂化。为什么不直接在例如运行protoc一个bash脚本?您将避免丢失protoc 的错误消息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2015-10-29
    • 1970-01-01
    • 2022-01-06
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多