Использование python для запуска другой программы?

У меня есть программа, которую я запускаю из командной строки, которая выглядит так:

$ program a.txt b.txt

  • Как просто вызвать команду и не получить ее выход
  • Перенаправить подпроцесс stderr в stdout
  • Убийство подпроцесса, включая его дочерние элементы из python
  • Подпроцесс Python: слишком много открытых файлов
  • OSError: Ошибка формата Exec
  • Подождите окончания подпроцессов с несколькими параллельными заданиями
  • В качестве аргументов программе требуются два текстовых файла. Я пытаюсь написать сценарий Python 3.2 для запуска вышеуказанной программы. Как я могу это сделать? В настоящее время я пытаюсь использовать модуль subprocess следующим образом:

     import subprocess with open("a.txt", mode="r") as file_1: with open("b.txt", mode="r") as file_2: cmd = ['/Users/me/src/program', file_1, file_2] process = subprocess.Popen(cmd, stdout=subprocess.PIPE) for line in process.stdout: print(line) 

    Я прочитал этот пост и сообщение здесь , которые, похоже, описывают похожие решения моей проблемы. К сожалению, после прочтения этих сообщений, я все еще не могу заставить мой код Python запускать свою программу.

    Может ли кто-нибудь помочь? Заранее спасибо!

  • Сохранение stdout из subprocess.Popen в файл, плюс запись большего количества материала в файл
  • безопасность pandas и numpy
  • Что такое протокол итератора Python?
  • Как преобразовать numpy.recarray в numpy.array?
  • как запустить easy_install с помощью конкретной версии python
  • Как сгенерировать список каталогов html с помощью Python
  • 3 Solutions collect form web for “Использование python для запуска другой программы?”

    subprocess.Popen ожидает массив строк. Два элемента в этом массиве – это дескрипторы файлов. Вам необходимо передать фактическое имя файла программе, которую вы пытаетесь запустить.

     cmd = ['/Users/me/src/program', 'a.txt', 'b.txt'] 

    Вы можете избавиться от with open(...) as ... строк полностью.

    Посмотрите на ответ @ Chris , а также:

    Подпроцесс не ждет завершения команды, поэтому вы должны использовать метод wait .

      process = subprocess.Popen(cmd, stdout=subprocess.PIPE) process.wait() for line in process.stdout: print(line) 

    В зависимости от ваших требований, os.system(cmdline) может быть простым решением.

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