121 votes

Exécuter un programme externe (exécutable) en Python ?

Je viens de commencer à travailler sur Python, et j'ai essayé d'exécuter un exécutable externe à partir de Python.

J'ai un exécutable pour un programme écrit en Fortran. Disons que le nom de l'exécutable est flow.exe. Et mon exécutable est situé dans C:\Documents and Settings\flow_model . J'ai essayé les commandes os.system et popen, mais jusqu'à présent, je n'ai pas réussi à faire fonctionner le système. Le code suivant semble ouvrir la fenêtre de commande, mais il n'exécute pas le modèle.

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

Comment puis-je résoudre ce problème ?

2voto

Bomba Ps Points 89

En python 2.6, utiliser la chaîne de caractères entre guillemets " et apostrophe '. Il faut également remplacer le simple / par le double //. Votre exemple de travail ressemblera à ceci :

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

Vous pouvez également utiliser n'importe quel paramètre si votre programme l'accepte.

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"')

Enfin, vous pouvez utiliser des variables de type chaîne de caractères, par exemple pour tracer un graphique à l'aide de gnuplot directement depuis 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)

1voto

Thanatos Points 13444

Est-ce qu'il essaie d'exécuter C:\Documents avec des arguments de "and", "Settings/flow_model/flow.exe" ?

Vous pouvez également envisager subprocess.call() .

1voto

user1147688 Points 391

Il existe un grand nombre de solutions différentes et les résultats dépendront fortement :

  • le système d'exploitation que vous utilisez : Windows, Cygwin, Linux, MacOS
  • la version de python que vous utilisez : Python2 ou Python3x

J'ai découvert que certaines choses qui sont censées ne fonctionner que sous Windows ne fonctionnent pas, probablement parce que j'utilise Cygwin qui est plus malin que le système d'exploitation pour gérer les chemins d'accès de Windows. D'autres choses ne fonctionnent qu'avec des systèmes d'exploitation purement *nix ou avec Python2 ou 3.

Voici mes conclusions :

  • D'une manière générale, os.system() est la méthode la plus indulgente.
  • os.startfile() est le moins indulgent. (Windows seulement && si vous avez de la chance)
  • subprocess.Popen([...]) no recommandé
  • subprocess.run(winView, shell=True) la voie recommandée !
  • Se souvenir que l'utilisation de subprocess car tout peut présentent un risque pour la sécurité .

Essayez-les :

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)

Q : Pourquoi voudriez-vous utiliser explorer dans Windows ?

R : Parce que si vous souhaitez simplement consulter les résultats d'un nouveau fichier, l'explorateur ouvrira automatiquement le fichier avec le programme Windows par défaut que vous avez défini pour ce type de fichier. Il n'est donc pas nécessaire de spécifier à nouveau le programme à utiliser par défaut.

0voto

Dan Olson Points 11210

C'est l'usage correct, mais peut-être que les espaces dans le nom du chemin d'accès perturbent les choses pour une raison ou une autre.

Vous pouvez également exécuter le programme sous cmd.exe afin de voir toute sortie de flow.exe qui pourrait indiquer une erreur.

0voto

Davide Points 5091

J'aime plus subprocess.Popen au lieu de call . Il vous donne plus de contrôle. Voir ici pour plus de détails.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X