В Python 3.3 +:
from subprocess import STDOUT, check_output
output = check_output(cmd, stderr=STDOUT, timeout=seconds)
output
представляет собой байтовую строку, содержащую объединенные stdout команды, данные stderr.
Этот код повышает значение CalledProcessError
при ненулевом статусе выхода, как указано в тексте вопроса, в отличие от метода proc.communicate()
.
Я удалил shell=True
, потому что он часто используется без необходимости. Вы всегда можете добавить его обратно, если cmd
действительно требует его. Если вы добавите shell=True
, то есть, если дочерний процесс порождает своих потомков; check_output()
может вернуться намного позже, чем указывает таймаут, см. Ошибка тайм-аута подпроцесса .
Функция тайм-аута доступна на Python 2.x через subprocess32
backport модуля подпроцесса 3.2+.
Я хотел бы убедиться в целостности данных в этом процессе.
blockquote>Если вы заинтересованы в обеспечении целостности сообщения во время транспортировки, использование TLS (ssl, https) поможет в большинстве случаев. Если вам нужна сквозная защита (подписанное, зашифрованное сообщение) между другими компонентами (kafka-> Java), вам нужно будет подписать сообщение. В большинстве случаев вы должны быть в порядке с первым вариантом (https).
Может ли это быть достигнуто простым способом (без сертификатов или ключей)?
blockquote>PKI (сертификаты и ключи) позволяет нам гарантировать целостность и конфиденциальность без жесткого кодирования секретов (которые не очень мудрый для мобильных приложений). У вас уже есть готовые библиотеки для SSL, так что считайте это «простым способом». Создание собственного протокола для подписи и проверки сообщений является только более сложным и, возможно, менее безопасным.
Я хотел бы знать, каков наилучший способ (алгоритм и практика) для шифрования и дешифрования между системами.
blockquote>Для базовой безопасности транспорта я бы предложил использовать TLS, вам все равно нужно аутентифицировать пользователя (имя пользователя, пароль?), Чтобы гарантировать идентичность клиента. TLS обеспечивает безопасный канал до точки завершения SSL (сервер https, слушатель kafka и т. Д.).
Если вам нужна сквозная защита (подписанное, зашифрованное сообщение) между другими компонентами (kafka-> Java), существуют некоторые стандарты для шифрования и подписи сообщений, такие как WS-Security для веб-служб или вы можете использовать подписанные и зашифрованные JWT для передачи сообщений.
Однако - вам придется безопасно обмениваться ключами между клиентом и проверяющим бэкэндом (с отдельной службой или некоторым протоколом обмена ключами).