从 application/x-protobuf 文件生成 python 类

generate python classes from application/x-protobuf file

我有一个 python 脚本,它从 youtube 接收一个 application/x-protobuf 文件。 这部分文件

*youtubei#playerResponse
2

yt_ad1
e~11200142,901816,936105,9407053,9407664,9407715,9408142,9410705,9412913,9415294,9416137,9417116,9417192,9417455,9418117,94182142
e~11200142,901816,936105,9407053,9407664,9407715,9408142,9410705,9412913,9415294,9416137,9417116,9417192,9417455,9418117,94182142\D6+
InnerTubeBuildLabelyoutube_20150727_RC2
InnerTubeChangelist99168778
e~11200142,901816,936105,9407053,9407664,9407715,9408142,9410705,9412913,9415294,9416137,9417116,9417192,9417455,9418117,94182142&
innertube.build.changelist99168778-
innertube.build.labelyoutube_20150727_RC2'
innertube.build.timestamp
1437996969E
!innertube.build.variants.checksum 47cbe83e1d9f5a44654ab7896473362e
innertube.client_name3!
innertube.client_version10.28z\BCA\EF\CA\DC\A2\C8 \E0](\A8F0\A48u@\B0\EAM\CD\CCL?U\CD\CCL?][=13=][=13=]@?`2h\E42p\C0>x\C4\A0[=13=]\AD[=13=][=13=][=13=][=13=]\B0[=13=]\B8[=13=]\C0\C8Ќ\D0[=13=]\D8\E0\E8\C7\F0d\F8[=13=][=13=][=13=]\C0[=13=]\C8\A0\A8[=13=]\B5[=13=][=13=]\A0B\B8[=13=]\D8[=13=]\E0[=13=]\E8[=13=]\F0\F0\F8[=13=][=13=][=13=]\B2ϭ\D3
[=13=][=13=] \C1\A2\DFޜ[=13=]Z\AD

我想从这个文件生成 python 类。 我使用协议来解码文件

cat binay_file | protoc --decode_raw > decoded_file

然后我用这个命令生成了类

protoc -I=/root --python_out=$DST_DIR /root/decoded_file

但是这个命令总是 returns "Expected top-level statement (e.g. "message")."错误。

protoc 的输入是 .proto 声明协议整体结构的源文件。看起来您正在尝试将实际消息用作输入。这行不通 - 它们不是一回事。

没有自动的方法从消息实例对 .proto 文件进行逆向工程,因为编码的消息不包含类型名称或字段名称之类的东西,并且只包含有关实际字段类型的有限信息。你可以根据--decode_raw的输出来猜测原始.proto文件,但这是一个逆向工程任务,需要人工分析,不是程序可以完成的。