父目录中的“ Protoc”命令在python_out目录中输出整个源目录

时间:2019-03-31 15:50:07

标签: protocol-buffers grpc-python

我有一个名为protos的目录,该目录包含一个.proto文件,但最终将包含多个文件。该目录有一个名为app的兄弟姐妹,我要在其中转储已构建的grpc python文件。

我正在尝试编写一个简单的bash脚本,该脚本将调用protoc命令并在.proto中构建protos文件,并将构建的文件输出到app < / p>

下面是tree我放置每个文件的位置。

├── build_protos.sh
└── trainingInstance (root module directory)
    |
    ├── app
    │   ├── app.py
    |   ├── (where I'd like my built files to go)
    |   |
    |   └──trainingInstance
    |      └──protos
    |         └──(where the built files actually go)
    |
    └── protos
        └── TrainingService.proto (what I'd like to compile)


当我运行build_protos.sh时,可以很好地检测到文件TrainingService.proto并对其进行了构建,但是没有将构建的文件放入...trainingInstance/app/<file>中,而是将其放置在...trainingInstance/app/trainingInstance/protos/<file>中(见上文)。

我认为我已经通过将proto_path显式设置为protos来解决了这个问题,但这似乎并不在乎。以下是我的build_protos.sh文件:

#!/bin/bash

working_dir=$(pwd)
proto_dirs=($(pwd)/trainingInstance)

for dir in $proto_dirs
do
    srcdir=$dir/protos #./trainingInstance/protos
    destdir=$dir/app #./trainingInstance/app
    echo Building $dir protos...

    python3 -m grpc_tools.protoc\
        -I $working_dir\
        --proto_path=$srcdir\
        --python_out=$destdir\
        --grpc_python_out=$destdir\
        $srcdir/*.proto #./trainingInstance/protos/*.proto

done

那么,有谁知道如何阻止协议在输出目录中建立这些反映的目录?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

发布此问题后不到5分钟(在之前使用脚本玩了一个小时之后),我已经解决了自己的问题:指向工作目录的-I标志强制{{ 1}}以这种方式构建文件,因为它的目的是使不同的protoc包分开。通过完全删除.proto标志可以解决此问题。

我觉得如果其他任何人遇到类似的问题,也应该把它留在这里。