Как организовать проверку кода

Есть вот такой код:

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 будет вывод ошибок.

→ Ссылка