12
votes

Affectation de la valeur à la variable de Shell à l'aide d'une valeur de retour de la fonction de Python

J'ai une fonction Python, FOOPY () qui retourne une certaine valeur. (int / double ou chaîne)

Je veux utiliser cette valeur et l'attribuer dans un script shell. Par exemple, après la fonction Python: P>

fooShell = python fooPy.py
#fooShell = $(python fooPy.py)
#fooShell = echo "$(python fooPy.py)"


0 commentaires

4 Réponses :


34
votes

Vous pouvez imprimer votre valeur en python, comme ceci: xxx

et dans votre script shell: xxx

Soyez sûr de ne pas laissez des espaces autour du = dans le script shell.


2 commentaires

Merci, ça a fonctionné! J'ai aussi commis une erreur en mettant des espaces autour =. Tellement fixé cela aussi.


+1 Pour mentionner "Assurez-vous de ne pas laisser d'espaces autour de la = dans le script shell", il agace l'enfer de la recrue comme moi.



3
votes

Vous devriez Imprimer la valeur renvoyée par FOOPY . La substitution de shell se lit de stdout. Remplacez la dernière ligne de votre programme avec Imprimer FOOPY () , puis utilisez le deuxième pipeline Shell que vous avez mentionné. Cela devrait fonctionner.


0 commentaires

11
votes

Dans votre code Python, vous devez imprimer le résultat.

fooShell=$(python fooPy.py) # note no space around the '='


2 commentaires

+ 1 Pour une réponse détaillée et des notes sur sys.stdout.write (), il est utile. Merci!


Brillant. Exactement ce que je cherchais



5
votes

Si vous souhaitez la valeur de l'instruction Python sys.exit code>, il sera dans la variable spéciale shell $? code>.

$ var=$(foo.py)
$ returnval=$?
$ echo $var
Some string
$ echo returnval
10


4 commentaires

+1 pour pointer le moyen d'obtenir le code de terminaison ... mais laissez-moi réparer un petit détail.


Merci pour le correctif (tels sont les dangers de travail dans plusieurs langues).


hmm..Ce fait appel à "impression_val" inutile (pas encore essayé). Merci, ceci est une information utile. +1.


Merci d'avoir mentionné le Sys.exit () / $? lien. C'est ce que je cherchais.