J'en suis un peu accro, alors je vais l'écrire sous forme de mémorandum.
protoc.main ()
Les deux méthodes suivantes sont prises en charge pour convertir proto en python.
$ python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. helloworld.proto
from grpc.tools import protoc
protoc.main((
'',
'-I.',
'--python_out=.',
'--grpc_python_out=.',
'helloworld.proto',
))
De la conclusion, il n'y a pas de fonction comme "spécifier un répertoire et lire proto récursivement", et il est nécessaire de spécifier proto un par un comme argument. Par conséquent, il n'est pas réaliste de le faire dans le shell, et on peut supposer que l'utilisation de `glob.glob () 'de python est un raccourci.
from grpc.tools import protoc
protoc.main((
'', #la magie
'-I.', #Spécification du répertoire à analyser proto--proto_path=***Peut être
'--python_out=.', # ***_pb2.Emplacement de stockage de py
'--grpc_python_out=.', # ***_pb2_grpc.Il semble qu'il n'y ait presque aucun avantage à le séparer de l'emplacement de stockage de py ↑
'helloworld.proto', #Spécification du fichier proto à convertir
))
Autrement dit, passez le taple à protoc.main ()
.
Tout ce que vous avez à faire est d'en ajouter de plus en plus à vos fesses.
from grpc.tools import protoc
protoc.main((
'',
'-I.',
'--python_out=.',
'--grpc_python_out=.',
'helloworld.proto',
'hoge.proto',
'fuga.proto',
'poyo.proto',
'piyo.proto'
))
Comme mentionné ci-dessus, l'utilisation de glob.glob ()
est fluide.
from grpc.tools import protoc
import glob
protos = glob.glob('hoge/**/*.proto', recursive=True)
protoc.main((
'',
'-I.',
'--python_out=.',
'--grpc_python_out=.',
'helloworld.proto',
*protos
))
Qu'est-ce que «*»! ?? Si vous pensez, vous pouvez google avec "argument de longueur variable python". Pour le dire clairement, c'est une méthode pratique qui s'étend à plusieurs variables en ajoutant un astérisque au début de la liste.
Recommended Posts