Je n'ai trouvé nulle part la possibilité d'imprimer le contenu convivial d'un message Google Protobuf.
Existe-t-il un équivalent dans Python pour la toString()
de Java ou la DebugString()
de C++?
Voici un exemple de lecture/écriture convivial fichier texte utilisant protobuf 2.0
in python.
from google.protobuf import text_format
lire à partir d'un fichier texte
f = open('a.txt', 'r')
address_book = addressbook_pb2.AddressBook() # replace with your own message
text_format.Parse(f.read(), address_book)
f.close()
écrire dans un fichier texte
f = open('b.txt', 'w')
f.write(text_format.MessageToString(address_book))
f.close()
L'équivalent c ++ est:
bool ReadProtoFromTextFile(const std::string filename, google::protobuf::Message* proto)
{
int fd = _open(filename.c_str(), O_RDONLY);
if (fd == -1)
return false;
google::protobuf::io::FileInputStream* input = new google::protobuf::io::FileInputStream(fd);
bool success = google::protobuf::TextFormat::Parse(input, proto);
delete input;
_close(fd);
return success;
}
bool WriteProtoToTextFile(const google::protobuf::Message& proto, const std::string filename)
{
int fd = _open(filename.c_str(), O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (fd == -1)
return false;
google::protobuf::io::FileOutputStream* output = new google::protobuf::io::FileOutputStream(fd);
bool success = google::protobuf::TextFormat::Print(proto, output);
delete output;
_close(fd);
return success;
}
Comme répondu, print
et __str__
fonctionne, mais je ne les utiliserais pas pour autre chose que des chaînes de débogage.
Si vous écrivez quelque chose que les utilisateurs peuvent voir, il vaut mieux utiliser le google.protobuf.text_format
module, qui a plus de contrôles (par exemple, échapper ou non les chaînes UTF8), ainsi que des fonctions pour analyser le format texte en tant que protobufs.