web-dev-qa-db-fra.com

Appeler a Python fonction d'un script shell

J'essaie de comprendre comment appeler A Python fonction d'un script shell.

J'ai un Python fichier avec plusieurs fonctions et j'ai besoin d'utiliser les valeurs renvoyées par eux dans mon script shell. Existe-t-il un moyen de le faire.

Je fais cela afin de lire un fichier de configuration à l'aide de Python et d'obtenir les valeurs dans Shell. Y a-t-il un autre meilleur moyen de y parvenir.

test.py contient:

import ConfigParser

config = ConfigParser.ConfigParser()
config.read("test.conf")

def get_foo():
    return config.get("locations", "foo")

def get_bar():
    return config.get("locations", "bar")

J'ai besoin de stocker les valeurs renvoyées par le Python fonctions dans une variable de coque.

18
user747858

Vous pouvez envoyer le résultat de vos fonctions à la sortie standard en demandant au Python Interprète d'imprimer le résultat:

python -c 'import test; print test.get_foo()'

L'option -c Demande simplement Python= d'exécuter certains Python commandes.

Afin de stocker le résultat dans une variable, vous pouvez donc faire:

RESULT_FOO=`python -c 'import test; print test.get_foo()'`

ou équivalent

RESULT=$(python -c 'import test; print test.get_foo()')

puisque Backticks et $(…) Évaluez une commande et remplacez-la par sa sortie.

[~ # ~] ps [~ # ~ ~]: Obtenir le résultat de chaque fonction nécessite l'analyse du fichier de configuration à chaque fois, avec cette approche. Cela peut être optimisé en retournant tous les résultats en une fois, avec quelque chose comme:

ALL_RESULTS=$(python -c 'import test; print test.get_foo(), test.get_bar()')

Les résultats peuvent ensuite être divisés et mettre dans différentes variables avec

RESULT_BAR=$(echo $ALL_RESULTS | cut -d' ' -f2)

qui prend le secondaire résultat et le met dans RESULT_BAR Par exemple (et de même: -fn pour le résultat #n) .

PPS : Comme Pablo Maurin a mentionné, il serait probablement plus facile de tout faire dans un seul interprète (python, mais peut-être aussi la coquille), si possible. de calculer des variables dans un programme et de les utiliser dans un autre.

28
Eric O Lebigot