Python supress grep no match exit status

У меня есть скрипт на Python, который проходит несколько проверок. Одна из проверок заключается в том, чтобы убедиться, что результат не включает ключевое слово, выполнив команду grep для ключевого слова и убедившись, что нет вывода. При чтении справочной страницы grep ожидаемый код выхода равен 1. Но с точки зрения пользователя проверка пройдена, поскольку ключевое слово отсутствует. Есть ли способ вернуть статус выхода 0 для grep без команд сопоставления, чтобы он не обрабатывался как исключение или каким-либо другим способом избежать его обработки как исключения? Обратите внимание, что пользователи будут создавать командный файл, поэтому я не могу полностью отказаться от использования grep.

import subprocess


    def cmd_test(command):
        try:
            cmd_output = subprocess.check_output(command,
                                                 stderr=subprocess.STDOUT,
                                                 shell=True,
                                                 timeout=120,
                                                 universal_newlines=False).decode('utf-8')
        except subprocess.CalledProcessError as exc:
            return (exc)
        else:
            return cmd_output.strip()

    print(cmd_test('env | grep bash'))
    print(cmd_test('env | grep test'))

print(cmd_test('env | grep bash'))
print(cmd_test('env | grep test'))

Выход:

SHELL=/bin/bash
Command 'env | grep test' returned non-zero exit status 1 b''

person MBasith    schedule 25.08.2017    source источник
comment
Эээ ... просто проверьте код выхода в объекте исключения? Или даже просто используйте объект Popen напрямую вместо check_foo()   -  person o11c    schedule 25.08.2017


Ответы (1)


Пример того, как grep возвращает выход 1 после несоответствия, нормальное поведение:

$ env | grep test
$ echo $?
1

Пример подавления возвращаемого значения grep и принуждения к 0 статусу выхода:

$ env | { grep test || true; }
$ echo $?
0

Попробуй это. Надеюсь, это поможет.

person Lubos    schedule 25.08.2017
comment
Вы можете использовать оператор ! , как здесь: stackoverflow.com/questions/367069/ - person Arminius; 25.08.2017