Comment exécuter un script Python avec un argument?

Oct 23 2020

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

3 TimLaska Oct 23 2020 at 02:57

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.