Comment faire un appel à un exécutable à partir d’un script Python?

Je dois exécuter ce script à partir de mon script Python.

C’est possible? Le script génère des sorties avec des fichiers en cours d’écriture. Comment accéder à ces fichiers? J’ai essayé avec la fonction d’appel de sous-processus mais sans succès.

fx@fx-ubuntu:~/Documents/projects/foo$ bin/bar -c somefile.xml -d text.txt -r aSsortingng -f anotherSsortingng >output 

L’application “bar” fait également référence à certaines bibliothèques, elle crée également le fichier “bar.xml” en plus de la sortie. Comment accéder à ces fichiers? Juste en utilisant open ()?

Je vous remercie,

Modifier:

L’erreur du runtime Python n’est que cette ligne.

 $ python foo.py bin/bar: bin/bar: cannot execute binary file 

Pour exécuter le programme externe, procédez comme suit:

 import subprocess args = ("bin/bar", "-c", "somefile.xml", "-d", "text.txt", "-r", "aSsortingng", "-f", "anotherSsortingng") #Or just: #args = "bin/bar -c somefile.xml -d text.txt -r aSsortingng -f anotherSsortingng".split() popen = subprocess.Popen(args, stdout=subprocess.PIPE) popen.wait() output = popen.stdout.read() print output 

Et oui, en supposant que votre programme bin/bar écrit d’autres fichiers assortis sur le disque, vous pouvez les ouvrir normalement avec open("path/to/output/file.txt") . Notez que vous n’avez pas besoin de compter sur un sous-shell pour redirect la sortie vers un fichier sur le disque nommé “output” si vous ne le souhaitez pas. Je montre ici comment lire directement la sortie dans votre programme python sans passer par le disque entre les deux.

Le moyen le plus simple est:

 import os cmd = 'bin/bar --option --otheroption' os.system(cmd) # returns the exit status 

Vous accédez aux fichiers de la manière habituelle, en utilisant open() .

Si vous devez effectuer une gestion de sous-processus plus complexe, le module de sous – processus est la solution.

Pour exécuter un fichier exécutable Unix. J’ai fait ce qui suit dans mon Mac OSX et cela a fonctionné pour moi:

 import os cmd = './darknet classifier predict data/baby.jpg' so = os.popen(cmd).read() print so 

Ici print so le résultat est print so .