Comment exécuter un script Python avec un argument?
Je veux exécuter un script Python avec l'argument 'arg'
> python app.py arg
Sans 'arg' ça marche comme
session = StartExternalSession["Python"];
ExternalEvaluate[session, File["app.py"]];
mais je ne comprends pas comment ajouter «arg».
Réponses
J'ai beaucoup d'environnements python sur mon ordinateur et je n'ai jamais pu faire reconnaître mon ExternalEvaluator. Ma solution de contournement consiste simplement à utiliser une commande shell. Si votre application ne renvoie que des valeurs, cela peut fonctionner assez bien. Par exemple, ma réponse sur la physique du corps rigide a été tirée de Mathematica , mais le gros du travail a été fait avec le python de Blender. Si votre application est interactive, cette réponse n'est pas pour vous.
Si nous copions l'exemple prog.py à partir de l'argparse de Python , nous pouvons exécuter une simple commande shell. Voici la liste python:
#!/usr/bin/env python
# prog.py
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
Voici une façon d'utiliser Run:
SetDirectory[NotebookDirectory[]];
outputfile = CreateFile[];
Run["C:\\Users\\Tim\\Anaconda2\\envs\\env37\\python prog.py 1 2 3 4 \
--sum >>" <> outputfile];
stext = OpenRead[outputfile];
Read[stext, Number]
DeleteFile[outputfile];
(* 10 *)
Voici une autre façon d'utiliser RunProcess:
SetDirectory[NotebookDirectory[]];
RunProcess[{"C:\\Users\\Tim\\Anaconda2\\envs\\env37\\python",
"prog.py", "--sum", "1", "2", "3", "4"}]["StandardOutput"]
(* "10" *)
Mettre à jour en réponse au commentaire
Le code dans comment,, Run["c:\\test\\python app.py --sum >> out2"] renvoie une erreur car il attend une liste d'arguments délimités par des espaces. RunProcessdonne plus d'informations sur le problème. Par exemple:
SetDirectory[NotebookDirectory[]];
RunProcess[{"C:\\Users\\Tim\\Anaconda2\\envs\\env37\\python",
"prog.py", "--sum"}]
(* <|"ExitCode" -> 2, "StandardOutput" -> "",
"StandardError" -> "usage: prog.py [-h] [--sum] N [N ...]
prog.py: error: the following arguments are required: N
"|> *)
Le code de sortie 0 signifie que le code a été exécuté avec succès. Le code de sortie différent de zéro n'envoie pas la sortie vers la sortie standard, mais vers l'erreur standard. L'erreur standard indique qu'il y a une erreur d'utilisation demandant au moins 1 argument numérique.