8
votes

Invoquer des scênes d'un script python

Je suis nouveau à Scuons et à Python. Je me demandais s'il y a un moyen d'invoquer des scênes à partir d'un script Python.

Mon script Python accepte de l'utilisateur, une liste de répertoires où le code à compiler est situé (en plus de faire de certaines autres choses non triviales). Il génère également une chaîne qui doit être utilisée comme nom de l'exécutable créée. par Scons.

Je veux transmettre ces informations de mon script Python en scons, puis invoquer des scons. Y a-t-il un moyen simple de faire cela?

Je peux penser aux possibilités suivantes:

  • Utilisez Subprocess.Call ("Scons" ...) Je ne suis pas sûr si Scons accepte toutes les informations que j'ai besoin pour passer en tant qu'arguments de ligne de commande
  • Demandez au script Python écrir dans un fichier. Demandez à l'estropode l'analyse du fichier et obtenez les informations passées.

0 commentaires

3 Réponses :


3
votes

Eh bien, je suppose que c'est possible en théorie. L'exécutable EXECUTABLE est juste un script Python et tout ce qu'il fait est exécuté scons.script.main () après avoir modifié le sys.path variable . Mais vous devrez probablement commencer à creuser profondément dans la source pour comprendre vraiment comment faire les choses que vous voulez.

Une solution beaucoup plus propre appelle votre script à partir du fichier SCONScript, qui est probablement l'utilisation prévue et devrait prouver beaucoup plus facile.


3 commentaires

J'ai examiné directement appeler scons.script.main () une fois et décidé qu'il n'allait pas la peine. Je suis allé pour envelopper l'appel dans un sous-processus.Call () Invocation et traitement de la ligne de commande arguments comme mentionné dans ma réponse. Je pense essayer de contourner le script effectif des scons pourrait conduire à un monde de blessures :)


Je suppose que cela ne répond pas à ma question: Si j'appelle mon script Python de la Saunon, comment puis-je transmettre des informations que je viens d'obtenir avant invoquant des scêles?


Y a-t-il un réel besoin d'invoquer votre script avant Scons? Vous pouvez importer votre script en tant que module à partir du fichier SCONScript, puis exécuter si nécessaire, en regroupant l'entrée nécessaire de l'utilisateur. Bien que techniquement pas la même chose, il n'y a pas de différence dans la mesure où l'utilisateur est concerné. Si ce n'est pas une option, la route proposée par Brandy est une solution réalisable.



2
votes

ive fait ceci à l'aide de sous-processus.Call () Fonction Python pour encapsuler la ligne de commande quelque peu longue et complexe arguments nécessaires pour le projet particulier que je travaillais. Il y a ceux qui ont fait valoir que l'invocation aurait dû être plus simple afin de ne pas avoir besoin de l'encapsuler, mais c'est un sujet différent :)

Une option à prendre en compte au lieu d'utiliser des arguments de ligne de commande consiste à utiliser la variable SCONSFLAGS SCONSFLAGS comme mentionné ICI . Personnellement, je préfère ne pas utiliser cette option.

Toutes les options dont vous avez besoin peuvent être transmises sous forme d'options de ligne de commande. Un bon moyen de personnaliser et de gérer la ligne de commande SCONS arguments est avec les scons Addoption () fonction. De plus, vous pouvez obtenir simple variable = valeur Variables en utilisant les scons Dictionnaire des arguments . Les autres fonctions de ligne de commande SCONS associées sont getOption () < / a> et Setoption () .

En ce qui concerne le passage dans une chaîne pour le nom exécutable: Swons peut ne pas aimer cela. À tout le moins, considérez-vous que vous exécutez votre script une fois avec une chaîne exécutable particulière, puis une seconde fois avec une autre, puis vous souhaitez nettoyer, vous risquez de finir par laisser des exécutables autour si les scons ne sont pas exécutés avec le même nom exécutable. < / p>


0 commentaires

1
votes

Merci pour les réponses. J'ai fini par utiliser cette méthode:

Le script Python écrit une liste d'options dans un fichier texte, la ferme et invoque scons -f mysconscript_file à l'aide d'un appel de sous-processus. Le sconstructeur lit les valeurs du fichier texte dans une liste et les utilise.


0 commentaires