我有一个名为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
那么,有谁知道如何阻止协议在输出目录中建立这些反映的目录?任何帮助表示赞赏。
答案 0 :(得分:1)
发布此问题后不到5分钟(在之前使用脚本玩了一个小时之后),我已经解决了自己的问题:指向工作目录的-I
标志强制{{ 1}}以这种方式构建文件,因为它的目的是使不同的protoc
包分开。通过完全删除.proto
标志可以解决此问题。
我觉得如果其他任何人遇到类似的问题,也应该把它留在这里。