grpcio-tools protoc.main给出“缺少输出指令”错误

时间:2019-09-10 10:10:42

标签: python protocol-buffers grpc grpc-python

我想使用super.setIntegerProperty("loadUrlTimeoutValue", 70000); 来在运行时生成python gRPC文件,如下所示。

protoc.main(...)

以上代码给出了“缺少输出指令” 错误,结果代码为from grpc_tools import protoc args = "--proto_path=. --python_out=grpc --grpc_python_out=grpc alpha.proto" result = protoc.main(c)

但是,下面的解决方法是将1用作命令行参数。这意味着alpha.proto文件就可以了。

alpha.proto

可能的原因是(1)import subprocess result = subprocess.call("python -m grpc_tools.protoc " + args, shell=True) 按照以下代码对每个字符进行编码,或者(2)protoc.main在内部错误地解析了参数路径。

protoc.main

如何正确使用def main(command_arguments): """Run the protocol buffer compiler with the given command-line arguments. Args: command_arguments: a list of strings representing command line arguments to `protoc`. """ command_arguments = [argument.encode() for argument in command_arguments] return _protoc_compiler.run_main(command_arguments)

2 个答案:

答案 0 :(得分:0)

下面的代码将在proto文件所在的.proto目录中生成python文件。

proto_files = ["proto/file1.proto", "proto/file2.proto"]

from grpc_tools import protoc
for file in proto_files:
    grpc_tools.protoc.main([
        'grpc_tools.protoc',
        '--proto_path=.',
        '--python_out=.',
        '--grpc_python_out=.',
        file
    ])

我从答案中得到了提示; https://stackoverflow.com/a/54236739/361100

答案 1 :(得分:0)

如果您正在学习golang protobuf的中级教程,请请勿复制粘贴

protoc --go_out=. *.proto

命令,因为--不是真实的-(破折号等),因此手动键入命令可以解决我的问题。

由于复制和粘贴不正确的字符,我收到了此错误

希望您能从我的愚蠢错误中学习:)