2012-04-30 3 views
1

Извините, если этот вопрос задан много раз. У меня есть файл DOS .exe. Он работает хорошо, дважды щелкнув его в Windows, который генерирует некоторые выходные файлы в рабочей папке. Однако мне нужно вызвать его из Python. Я пробовал следующие команды (subprocess.Popen и os.system), но он открывает окно DOS без сохранения выходных файлов. Так может кто-нибудь дать мне подсказку?Вызвать исполняемый файл DOS с Python

Спасибо!

КОД

a=subprocess.Popen(r"I:/dosefile.exe") 
a1=os.system(r"I:/dosefile.exe") 

UPDATE Он работал, поставив .py файл сценария в складку, содержащей dosefile.exe. Есть ли способ заставить его работать без переноса файла .py?

Постройте его. Мне нужно изменить рабочую папку с помощью os.chdir(), если .py файл находится где-то

+0

Аналогичный вопрос обсуждался ранее. Надежда [это] (http://stackoverflow.com/questions/1811691/running-an-outside-program-executable-in-python) помогает. – AurA

+0

Что вы имеете в виду по выходному файлу? вы пытаетесь создать выходные файлы, в которых существует ваш скрипт py или где существует файл dosfile.exe. – anselm

+0

Возможно, он хочет передать вывод STDOUT/STDERR. – ninMonkey

ответ

1

Попробуйте вызвать его как системный вызов

import os 
os.system('I:/dosefile.exe') 

Затем разобрать выходные файлы, которые он создает.

+0

Спасибо за предложение. Я пробовал этот подход. Но мое возвращаемое значение равно 8. Означает ли это, что файл dos был неправильно вызван? –

+0

Он работал после того, как установил сценарий .py в папку с дозовым файлом.exe. Благодаря! –

1

Лучше всего было бы использовать:

os.chdir('I:')

, а затем вы можете использовать subrprocess.
os.system очень ограничена и подпроцесс. Предпочтение должно быть предпочтительным.

Еще лучше: будет использовать подпроцесс. Ключевое слово «cwd», которое устанавливает рабочий каталог.

subprocess.Popen(self, args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None,\ 
preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, \ 
startupinfo=None, creationflags) 

Python является простым языком на практике, и такие вещи, как os.system делает работу, потому что Python очень снисходителен (не как C ...). Тем не менее, я действительно рекомендую приложить усилия, чтобы изучить более мощные инструменты, поставляемые с Python.
Вы не пожалеете позже.

+0

Спасибо за рекомендации подпроцесса. Я использую его. Однако мой .exe-файл создаст кучу файлов и сохранит их на моем жестком диске. Есть ли способ использовать stdout для передачи их Python? –

+0

Знаете ли вы имена созданных файлов?если это текстовые файлы, должно быть достаточно просто прочитать их, когда будет выполнен Popen.communicate(). – Oz123

+0

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

Смежные вопросы