Фильтрация строки Python через внешнюю программу - PullRequest
1 голос
/ 20 апреля 2010

Какой самый чистый способ фильтрации строки Python через внешнюю программу? В частности, как вы пишете следующую функцию?

def filter_through(s, ext_cmd):
  # Filters string s through ext_cmd, and returns the result.

# Example usage:
#   filter a multiline string through tac to reverse the order.
filter_through("one\ntwo\nthree\n", "tac")
#   => returns "three\ntwo\none\n"

Примечание: пример только такой - я понимаю, что в python есть гораздо лучшие способы изменения линий

1 Ответ

5 голосов
/ 20 апреля 2010

Используйте модуль для подпроцесса .

В вашем случае вы можете использовать что-то вроде

import subprocess
proc=subprocess.Popen(['tac','-'], shell=True, stdin=subprocess.PIPE,
                      stdout=subprocess.PIPE, )
output,_=proc.communicate('one\ntwo\nthree\n')
print output

Обратите внимание, что отправленная команда - tac -, поэтому tac ожидает ввода от стандартного ввода. Мы отправляем в stdin, вызывая метод communicate. communicate возвращает 2-кортеж: вывод из stdout и stderr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...