0

我有一个名为的目录protos,其中包含一个.proto文件,但最终会包含许多文件。该目录有一个名为 的同级目录app,我想在其中转储构建的grpcpython 文件。

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

下面是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_pathto解决了这个问题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

那么有谁知道如何阻止 protoc 在输出目录中创建这些反射目录?任何帮助表示赞赏。

4

1 回答 1

4

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

我觉得我应该把这个留在这里,以防其他人有类似的问题。

于 2019-03-31T15:55:34.437 回答