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

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

$ program a.txt b.txt

Программа требует двух текстовых файлов в качестве аргументов. Я пытаюсь написать Python 3.2 script для запуска указанной выше программы. Как я могу это сделать? В настоящее время я пытаюсь использовать модуль 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 запускать свою программу.

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

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

Использование subprocess.wait() с stdout=subprocess.PIPE не рекомендуется.

with subprocess.Popen(cmd, stdout=subprocess.PIPE) as proc:
    print(proc.stdout.read())

Вам не нужно вызывать subprocess.wait(). Это выведет стандартный вывод proc реальном времени, а родительский процесс будет ожидать завершения proc.

Проверьте эти URL для получения дополнительной информации.

https://docs.python.org/3.5/library/subprocess.html#popen-objects https://docs.python.org/3.5/library/subprocess.html#popen-constructor