【问题标题】:File does not reside within any path specified文件不在指定的任何路径中
【发布时间】:2020-07-16 05:43:34
【问题描述】:

我想在当前目录和所有子目录中递归编译 protobuf 文件。我正在运行以下脚本:

D:\Code\cloudapi>for /R %i  in (*) do python -m grpc_tools.protoc --python_out=. --proto_path=. %i

但我收到的唯一信息是以下错误:

D:\Code\cloudapi\third_party\googleapis\google\type\dayofweek.proto: 文件不在使用 --proto_path 指定的任何路径中(或 -一世)。您必须指定包含此文件的 --proto_path。请注意,proto_path 必须是 .proto 文件的确切前缀 names -- protoc 太笨了,无法弄清楚何时有两条路径(例如 绝对和相对)是等价的(比你想象的要难)。

有没有办法解决这个问题?

【问题讨论】:

    标签: python cmd protocol-buffers protoc


    【解决方案1】:

    是的,你可以使用windowsFOR命令的选项来指向文件夹。

    这样的事情应该可以工作:

    for /R %i  in (*) do python -m grpc_tools.protoc --python_out= %~di%~pi --proto_path= %~di%~pi %i
    

    我猜您希望输出与源文件夹位于同一文件夹中。

    我在这里所做的是使用 Windows FOR 命令的可选扩展语法。如果你去for /?你可以看到更多的选择。

    基本上%~di 被转换为%i 的完整路径的驱动器号,这是您的文件。 %~pi 是该文件夹的路径(不包括驱动器)。

    所以我已经在--proto_path 参数上指定了它应该让它振作起来。我对 --python_out 使用了相同的方法,但您可能希望将其还原为 . 以使其进入父文件夹。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 2020-08-08
      • 2018-05-01
      相关资源
      最近更新 更多