Запускать внешнюю программу (исполняемый файл) на Python? - PullRequest
78 голосов
/ 28 ноября 2009

Я только начал работать над Python и пытался запустить внешний исполняемый файл из Python.

У меня есть исполняемый файл для программы, написанной на Фортране. Допустим, имя исполняемого файла - flow.exe. И мой исполняемый файл находится в C:\Documents and Settings\flow_model. Я пробовал обе команды os.system и popen, но до сих пор не мог заставить это работать. Следующий код выглядит так, как будто он открывает командное окно, но он не будет выполнять модель.

# Import system modules
import sys, string, os, arcgisscripting
os.system("C:/Documents and Settings/flow_model/flow.exe")

Как я могу это исправить?

Ответы [ 15 ]

0 голосов
/ 25 января 2019

в Python 2.6 использовать строки, заключенные в кавычки "и апострофы". Также изменение одного / двойного //. Ваш рабочий пример будет выглядеть так:

import os
os.system("'C://Documents and Settings//flow_model//flow.exe'") 

Также Вы можете использовать любые параметры, если Ваша программа их принимает.

os.system('C://"Program Files (x86)"//Maxima-gcl-5.37.3//gnuplot//bin//gnuplot -e "plot [-10:10] sin(x),atan(x),cos(atan(x)); pause mouse"')

Наконец, вы можете использовать строковую переменную, например, вы можете использовать gnuplot непосредственно из python:

this_program='C://"Program Files (x86)"//Maxima-gcl-5.37.3//gnuplot//bin//gnuplot'

this_par='-e "set polar; plot [-2*pi:2*pi] [-3:3] [-3:3] t*sin(t); pause -1"'
os.system(this_program+" "+this_par)
0 голосов
/ 03 ноября 2018

Существует множество различных решений, и результаты будут сильно зависеть от:

  • ОС, которую вы используете: Windows, Cygwin, Linux, MacOS
  • версия Python, которую вы используете: Python2 или Python3x

Поскольку я обнаружил, что некоторые вещи, которые, как утверждают, работают только в Windows, не работают, вероятно, потому, что я использую Cygwin, который переигрывает ОС для работы с путями Windows. Другие вещи работают только в чистых ОС * nix или в Python2 или 3.

Вот мои выводы:

  • Вообще говоря, os.system() - самый прощающий метод.
  • os.startfile() наименее прощающий. (Только для Windows &&, если вам повезет)
  • subprocess.Popen([...]) не рекомендуется
  • subprocess.run(winView, shell=True) рекомендуемый способ!
  • Помня, что использование subprocess для чего-либо может создать угрозу безопасности .

Попробуйте это:

import os, subprocess
...
winView = '/cygdrive/c/Windows/explorer.exe %s' % somefile
...
# chose one of these:
os.system(winView)
subprocess.Popen(['/cygdrive/c/Windows/explorer.exe', 'somefile.png'])
subprocess.run(winView, shell=True)

В: Почему вы хотите использовать explorer в Windows?

A: Поскольку, если вы просто хотите посмотреть результаты какого-то нового файла, проводник автоматически откроет файл с любой программой Windows по умолчанию, которую вы установили для этого типа файла. Поэтому нет необходимости заново указывать программу по умолчанию для использования.

0 голосов
/ 16 октября 2018
import os
path = "C:/Documents and Settings/flow_model/"
os.chdir(path)
os.system("flow.exe")
0 голосов
/ 16 августа 2018

для вышеуказанного вопроса это решение работает.

просто измените путь к вашему исполняемому файлу.

import sys, string, os

os.chdir('C:\\Downloads\\xpdf-tools-win-4.00\\xpdf-tools-win-4.00\\bin64')

os.system(r"C:\\Downloads\\xpdf-tools-win-4.00\\xpdf-tools-win-4.00\bin64\\flowwork.exe)


'''import sys, string, os

os.chdir('C:\\Downloads\\xpdf-tools-win-4.00\\xpdf-tools-win-4.00\\bin64')

os.system(r"C:\\Downloads\\xpdf-tools-win-4.00\\xpdf-tools-win-4.00\bin64\\pdftopng.exe test1.pdf rootimage")'''

Здесь test1.pdf rootimage для моего кода.

0 голосов
/ 28 ноября 2009

Это правильное использование, но, возможно, пробелы в имени пути по какой-то причине мешают.

Возможно, вы захотите запустить программу и под cmd.exe, чтобы увидеть любой вывод из потока.exe, который может указывать на ошибку.

...