Как организовать проверку кода
Есть вот такой код:
password = self.password+'\n'
password = password.encode()
# Если нет, копируем файл, проверяем на ошибки, и перезапускаем bind
try:
copy_file = subprocess.Popen(['sudo', '-S', 'cp',\
'/home/bel/new_parser_bel/zones.blacklisted', '/etc/bind/zones/'],\
stdin=subprocess.PIPE, stdout=subprocess.PIPE,\
stderr=subprocess.PIPE).communicate(input=bytes(password))
except subprocess.CalledProcessError as exc:
log.error('FAIL to copy', exc.returncode, exc.output)
Нужно сделать проверку на выходные данные(stderr, stdout)
К примеру:
if len(copy_file.stderr)>0:
log.error("Fail to copy", copy_file.stderr)
sys.exit(0)
if len(copy_file.stdout)>0:
log.info(copy_file.stdout)
Но когда я обращаюсь к copy_file, пишет что это tuple.
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Ну, надо просто посмотреть документацию по subprocess.Popen.communicate:
communicate() returns a tuple (stdout_data, stderr_data). The data will be strings if streams were opened in text mode; otherwise, bytes.
Так что нужно использовать такой код, прямо как в документации написано:
outs, errs = subprocess.Popen(...).communicate(...)
Тогда в errs будет вывод ошибок.