나는 파이썬 2 용으로 컴파일 된 구글 프로토콜 버퍼를 가지고 있으며 파이썬 3에이 포트를 연결하려고 시도하고있다. 불행하게도 나는 어디에서나 컴파일 된 프로토콜 버퍼를 생성하는데 사용되는 proto 파일을 찾을 수 없다. proto 파일을 복구하여 파이썬 3에 대해 새로운 파일을 컴파일하는 방법은 무엇입니까? 나는 proto 버전이 사용 된 것을 알지 못하고 파이썬 2.6에서 실행되는 .py 파일 만 가지고 있습니다.컴파일 된 프로토콜 버퍼를 다시 .proto 파일로 변환하는 방법?
답변
메시지 설명자 트리를 살펴볼 수 있도록 코드를 작성해야합니다 (예 : Python). 그들은 원칙적으로 코드 주석을 제외한 원래의 proto 파일의 모든 정보를 가지고 있어야합니다. 그리고 여러분이 여전히 가지고있는 생성 된 파이썬 모듈은 proto 파일을위한 파일 디스크립터를 proto 코드로 표현하는 코드에 제공 될 수있는 파일 디스크립터 proto 메시지로 직렬화 할 수 있도록해야한다.
가이드로서 protoc에 대한 다양한 코드 생성기를 살펴보아야합니다. protoc에 대한 파일 생성기에서 파일 설명자를 읽고 분석하고 코드를 생성합니다. 여기
파이썬에서https://www.expobrain.net/2015/09/13/create-a-plugin-for-google-protocol-buffer/
여기 protoc 플러그인
https://github.com/google/protobuf/blob/master/docs/third_party.md
을 공식 목록의 Protobuf 플러그인을 작성하는 방법을 기본적인 소개입니다 그리고 여기 LUA 코드를 생성하는 protoc 플러그인입니다 , 파이썬으로 작성되었습니다.
https://github.com/sean-lin/protoc-gen-lua/blob/master/plugin/protoc-gen-lua
는의 메인 코드 블록def main():
plugin_require_bin = sys.stdin.read()
code_gen_req = plugin_pb2.CodeGeneratorRequest()
code_gen_req.ParseFromString(plugin_require_bin)
env = Env()
for proto_file in code_gen_req.proto_file:
code_gen_file(proto_file, env,
proto_file.name in code_gen_req.file_to_generate)
code_generated = plugin_pb2.CodeGeneratorResponse()
for k in _files:
file_desc = code_generated.file.add()
file_desc.name = k
file_desc.content = _files[k]
sys.stdout.write(code_generated.SerializeToString())
for proto_file in code_gen_req.proto_file:
실제로 코드 생성기 플러그인이 LUA 코드를 생성하는 protoc에 의해 요청 된의 파일 기술자 객체를 통해 루프 루프를 살펴 보자. 그래서 지금 당신이 뭔가를 할 수 있습니다 :
# This should get you the file descriptor for your proto file
file_descr = your_package_pb2.sometype.GetDescriptor().file
# serialized version of file descriptor
filedescr_msg = file_descr.serialized_pb
# required by lua codegen
env = Env()
# create LUA code -> modify it to create proto code
code_gen_file(filedescr, env, "your_package.proto")
어떤 의미인지 알 수 있습니까? –
'sometype'은 여러분의 proto 정의에서 어떤 메시지 유형을 사용할 수 있음을 의미합니다. proto 파일의 Proto'FileDescriptor' 오브젝트에 도달하기 위해서는이 타입이 필요합니다. propo 파일에 대한'FileDescriptor' 인스턴스를 얻는 더 직접적인 방법이 있습니다. 그러나 그것에 대한 지식이 없습니다. – Omni
- 1. Google 프로토콜 버퍼를 일반 객체로 변환하는 방법
- 2. Google 프로토콜 버퍼를 컴파일 할 수 없습니다.
- 3. 프로토콜 버퍼를 사용하여 특정 필드의 직렬화를 방지합니다.
- 4. 프로토콜 버퍼를 POJO로 변환
- 5. 프로토콜 버퍼를 사용하는 Python 프로젝트, 배포 문제
- 6. 스위프트에 프로토콜 버퍼를 추가하는 방법은 무엇입니까?
- 7. 프로토콜 버퍼를 사용하는 FileOutputStream의 일일 롤오버?
- 8. 설명자 문자열에서 .proto 파일 복원. 가능한?
- 9. Emacs에서 * 컴파일 * 버퍼를 편집하는 방법
- 10. Android NDK로 프로토콜 버퍼를 구축하는 방법
- 11. runserver에서 Django의 proto 파일 컴파일
- 12. protobuf .proto 파일로 C++ 헤더 파일 변환
- 13. 프로토콜 버퍼를 사용하여 동적 메시지를 만드는 방법은 무엇입니까?
- 14. 컴파일 된 프로토콜 버퍼 코드 파일에 ParseFromIstream 메서드가 없습니다.
- 15. 프로토콜 버퍼를 사용한 델타 압축
- 16. 프로토콜 버퍼를 지원하는 데이터베이스가 있습니까?
- 17. Google 프로토콜 버퍼를 사용하는 Boost.Asio
- 18. PHP에서 GTFS 프로토콜 버퍼를 읽는 방법은 무엇입니까?
- 19. 프로토콜 버퍼 : enum을 위해 .proto 파일을 만드는 방법?
- 20. 프로토콜 버퍼 .NET 코드에서 .proto 파일을 생성하는 방법?
- 21. 컴파일 된 JasperReport를 .jasper 파일로 저장하는 방법
- 22. 폴더를 jar 파일로 변환하는 방법 - 코드
- 23. .proto 파일을 빌드하는 automake를 google 프로토콜 버퍼가있는 .pb.cc 파일로 만들 수 없습니다.
- 24. XSSFWorkbook을 파일로 변환하는 방법
- 25. 0을 포함하는 바이트 버퍼를 문자열로 변환하는 방법
- 26. 컴파일 버퍼를 얻으려면 어떻게해야합니까?
- 27. Nullable 유형을 프로토콜 버퍼를 통해 보낼 수 있습니까?
- 28. 컴파일 된 DLL 파일로 디버그
- 29. TextArea의 텍스트를 파일로 변환하는 방법?
- 30. 순수 파이썬 코드로 프로토콜 버퍼를 컴파일하는 방법이 있습니까?
포스트 파이썬 파일 내용 적어도 –
@TarunLalwani 불행히도 그 파일의 내용이 그래서 그것을 게시 할 수 없습니다 기밀 정보를 받고. –