Чтобы выполнить командный файл в Windows:
from subprocess import Popen
p = Popen("batchfile.bat", cwd=r"c:\directory\containing\batchfile")
stdout, stderr = p.communicate()
Если вы не хотите выполнять пакетный файл, а хотите выполнить команду по вашему вопросу непосредственно из Python, вам нужно немного поэкспериментировать с первым аргументом Popen.
Прежде всего, первый аргумент может быть либо строкой, либо последовательностью.
То есть вы пишете:
p = Popen(r'"C:\Program Files\Systems\Emb Work 5.4\common\bin\run" "C:\Program Files\Systems\Emb Work 5.4\arm\bin\mpr.dll" ... ...', cwd=r"...")
или
p = Popen([r"C:\Program Files\Systems\Emb Work 5.4\common\bin\run", r"C:\Program Files\Systems\Emb Work 5.4\arm\bin\mpr.dll", ...], cwd=r"...")
# ... notice how you don't need to quote the elements containing spaces
Согласно документации:
В Windows: класс Popen использует CreateProcess () для выполнения дочерней программы, которая работает со строками. Если args является последовательностью, она будет преобразована в строку с помощью метода list2cmdline (). Обратите внимание, что не все приложения MS Windows интерпретируют командную строку одинаково: list2cmdline () предназначен для приложений, использующих те же правила, что и среда выполнения MS C.
Так что, если вы используете последовательность, она будет преобразована в строку. Я, вероятно, сначала попробую с последовательностью, так как тогда вам не нужно будет заключать в кавычки все элементы, содержащие пробелы (list2cmdline()
сделает это за вас).
Для устранения неполадок я рекомендую передать последовательность в subprocess.list2cmdline()
и проверить вывод.
Edit:
Вот что бы я сделал на твоем месте:
a) Создайте простой скрипт на Python (testparams.py
), например:
import subprocess
params = [r"C:\Program Files\Systems\Emb Work 5.4\common\bin\run.exe", ...]
print subprocess.list2cmdline(params)
b) Запустите скрипт из командной строки (python testparams.py
), скопируйте и вставьте вывод в другую командную строку, нажмите ввод и посмотрите, что произойдет.
в) Если он не работает, отредактируйте файл python и повторяйте его до тех пор, пока он не будет работать.