Печать подпроцесса при повторном захвате

Я запускаю команду bash в python с:

proc = subprocess.Popen(cmd) proc.wait() 

Этот cmd выводит результат. Однако я не хочу, чтобы он печатался, если он не был захвачен некоторым регулярным выражением. Не уверен, как это сделать, поскольку это мой первый раз, используя subprocess

  • Nohup не записывает журнал в выходной файл
  • Возможно ли получить доступ к API GetLongPathName () Win32 в Python?
  • Django: определить, какой пользователь удаляет при использовании сигнала post_delete
  • Sqlalchemy: обновление вторичных отношений
  • Как использовать `GridSpec ()` с `subplots ()`
  • pylab matplotlib "show" ждет, пока окно не закроется
  • Каков самый простой способ создания всплывающих подсказок в Tkinter?
  • Сопоставьте два списка в словаре в Python
  • 4 Solutions collect form web for “Печать подпроцесса при повторном захвате”

    Вы также можете напрямую выводить вывод на grep и т. Д.:

     from subprocess import PIPE, Popen p = Popen(["ps"], stdout=PIPE) p2 = Popen(["grep", "chrome"],stdin=p.stdout, stdout=PIPE,universal_newlines=True) p.stdout.close() out,err = p2.communicate() print(out) 421 ? 00:00:03 chrome 767 ? 00:00:02 chrome 843 ? 00:00:04 chrome 2788 ? 00:52:16 chrome 2819 ? 00:00:00 chrome-sandbox 2820 ? 00:00:00 chrome 2827 ? 00:00:00 chrome-sandbox 

    Ты можешь сделать:

     proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = proc.communicate() 

    Чтобы проверить выход / ошибку, вы можете применить свое регулярное выражение (out,err) и распечатать все, что захотите.

    надеюсь это поможет.

    В простом случае вы сможете использовать subprocess.check_output для получения результата вызова. В Python3 это возвращает объект bytes . В Python2 это как обычно.

     # Python3 result_in_bytes = subprocess.check_output(cmd) result = result_in_bytes.decode() # -> string # Python2 result = subprocess.check_output(cmd) 

    Затем вы сможете запустить регулярное выражение в этой строке.

    Чтобы эмулировать конвейер оболочки:

     #!/usr/bin/env python from subprocess import Popen, PIPE output = Popen("cmd | grep 'pattern'", shell=True, stdout=PIPE).communicate()[0] 

    без оболочки:

     #!/usr/bin/env python from subprocess import Popen, PIPE grep = Popen(['grep', 'pattern'], stdin=PIPE, stdout=PIPE) cmd_process = Popen(['cmd'], stdout=grep.stdin) output = grep.communicate()[0] cmd_process.wait() 

    Или вы можете отфильтровать вывод cmd в чистом Python:

     #!/usr/bin/env python from subprocess import Popen, PIPE matched_lines = [] cmd_process = Popen(['cmd'], stdout=PIPE) with cmd_process.stdout: for line in iter(cmd_process.stdout.readline, b''): if b'pattern' in line: # or re.match(br'pattern', line) matched_lines.append(line) cmd_process.wait() 
    Interesting Posts

    Python Запрашивает получение («Соединение прервано»., BadStatusLine («'' ',)) error

    Как печатать на консоли в Py Test?

    Извлечение связанных объектов из образа в Python

    Приложение Flask вызывает ошибку 500 без исключения

    Проблема с файловой структурой Python + PyCharm: объект AttributeError: 'module' не имеет атрибута 'X'

    Анализ CSV-файла в pandas с запятыми в последнем столбце

    Ошибка при установке scipy на окнах

    Ответ python urllib2 urlopen

    Список расщепления Python на основе недостающих чисел в последовательности

    Python: Правильный способ инициализации, когда суперклассы принимают разные аргументы?

    Отображать вывод в реальном времени подпроцесса в виджет tkinter

    Можно ли использовать «else» в понимании списка python?

    Как получить диаграмму потока управления для кода python?

    Проблемы с установкой lxml на Mac, он устанавливается, но модуль не найден

    Как я могу сортировать кортежи с помощью обратного, но разрыв связей не обратный? (Python)

    Python - лучший язык программирования в мире.