, поэтому я пытаюсь отправить более сериализованные сообщения protobuf через SSH и десериализовать их на моем локальном компьютере. Тем не менее, по какой-то причине, когда я отправляю через сериализованную строку, я получаю сообщение DecodeError о том, что я пытаюсь десериализовать Truncated Message.Отправка сериализованного сообщения Protobuf по SSH
У меня есть эта настройка, у меня есть два сценария, один из которых выполняется на сервере через Popen и ssh по моему локальному скрипту. Скрипт, запущенный на сервере, просто печатает сообщение .SerializeToString() в stdout, а затем я собираю этот вывод через Popen.stdout в своем локальном скрипте. Вот некоторые фрагменты кода:
Local Machine Script:
magic_str = 'this_is_magical'
ssh = subprocess.Popen('ssh xxx.xxx.xxx.xxx logsearch.py', stdout=subprocess.PIPE)
for line in ssh.stdout:
#this is just the specific protobuf message structure I created
l = log_pb2.LogLine()
#restore the internal newlines, discussed below
l.ParseFromString(line.replace(magic_str, '\n'))
Сервер Script (logsearch.py):
#get some LogLine object named l, and we replace the internal newlines with
#magic_str because it messes up reading line by line in the local script
magic_str = 'this_is_magical'
print l.SerializeToString().replace('\n', magic_str)
Спасибо заранее за любую помощь вы можете предоставить мне, что очень ценится. Если какая-либо дополнительная информация необходима или если что-то неясно, сообщите мне, и я обязательно уточню.
Это именно то, что я искал. Оказывается, двоичная строка не совсем то же самое после отправки ее через SSH, поэтому простейшая кодировка base64 перед отправкой данных по разрешению моих проблем. Спасибо! – xlnc