2016-07-14 5 views
0

Я пытаюсь интегрировать существующую программу в разрабатываемый сценарий Python 2.7. В настоящее время программа может быть успешно запущена, введя в командной строке следующее:Использование Python для запуска файла .exe в командной строке Windows

 `C:\wisdem\plugins\JacketSE\src\jacketse\SubDyn\bin\SubDyn_Win32.exe C:\wisdem\plugins\JacketSE\src\jacketse\SubDyn\CertTest\Test04_TrialD3.txt` 

Это все одна строка; файл .txt содержит входы, необходимые для файла .exe. Я попытался с помощью как os.system("C:\wisdem\plugins\...) и

subprocess.Popen("C:\wisdem\plugins\...", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE).stdout.read()

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

+0

Подумайте, что означает '' \ b "'. Используйте необработанную строку для команды, например. 'p = subprocess.Popen (r" C: \ wisdem \ plugins \ ... ", ...)'. Кроме того, не используйте 'shell = True'. Не используйте трубку для 'stdin' или' stderr', если вы их не используете. Оставьте их как есть или передайте дескриптор файла для нулевого устройства, например. 'fd_null = os.open (os.devnull, os.O_RDWR)'. Если вы делаете трубку более чем одним стандартным файлом, используйте метод 'communication()', чтобы избежать возможности взаимоблокировки. – eryksun

ответ

0
import os 
print os.popen(r'''echo "hello"''').read() 

Я предлагаю ввести полную команду в тройные кавычки и попытаться. Это выполнит команду, а затем распечатает вывод.

Использование строкового литерала с префиксом r должно помочь с любыми странными проблемами escape-символа, которые вы испытываете.

Обратите внимание, что при использовании вышеуказанного кода возникают проблемы с безопасностью, а os.popen устарел с версии 2.6. Однако для быстрого локального скрипта в версии 2.7 это будет достаточно.

+0

Спасибо! Это, казалось, сработало: – CBroslawski

+0

print os.popen (r '' 'C: \ wisdem \ plugins \ JacketSE \ src \ jacketse \ SubDyn \ bin \ SubDyn_Win32.exe C: \ wisdem \ plugins \ JacketSE \ src \ jacketse \ SubDyn \ CertTest \ Test04_TrialD3.txt '' '). Read() – CBroslawski

+0

Я также пробовал использовать subprocess.Popen (r' '' C: \ wisdem \ plugins \ JacketSE \ src ... '' ') и subprocess.call (r' '' C: \ wisdem \ plugins \ JacketSE \ src ... '' '), и оба они запускали .exe, но не возвращали результаты в Python. Это обескураживает, потому что кажется, что подпроцесс является более современным/надежным, чем os.popen. Тем не менее, я благодарен за помощь! – CBroslawski