web-dev-qa-db-fra.com

Comment exécuter une définition python dans un fichier .py à partir du shell?

Ma fonction se trouve dans un fichier .py avec le même nom que la fonction:

emp@emp:~$ python ~/Dropbox/emp/Python/stromkosten_pro_jahr.pyempedokles@empedokles:~$ stromkosten_pro_jahr(20,3)
bash: Syntaxfehler beim unerwarteten Wort »20,3«
emp@emp:~$ 

Où est l'erreur?

4
empedokles

Vous devez cd dans le répertoire où se trouve votre fichier python, puis appeler le shell interactif python pour pouvoir appeler et exécuter des fonctions de manière interactive.

# cd to the directory
$ cd ~/Dropbox/emp/Python/

# invoke the python interactive Shell
$ python     # use `python3` to invoke the Python3 Shell

Le shell interactif Python ressemblerait à ceci:

Python 2.7.6 (default, Mar 22 2014, 22:59:38) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Ici, vous pouvez importer le module (votre fichier * .py) et exécuter les fonctions qui y sont écrites:

>>> from stromkosten_pro_jahr import stromkosten_pro_jahr
>>> stromkosten_pro_jahr(20,3)
[The output of function would be shown right here]

Pour plus d'informations, je suggérerais de passer Le Python Tutorial .

4
Aditya

Comme je l’ai trouvé dans cette réponse , vous pouvez exécuter la fonction de python directement à partir de bash comme:

$ python -c 'from a import stromkosten_pro_jahr; stromkosten_pro_jahr(20,3)'

a est le nom de votre fichier/module (a.py).

Mais l’important est d’être dans le même répertoire que votre fichier.

2
dannydedog

Vous ne pouvez pas appeler les fonctions Python directement à partir du Bash Shell. Vous obtenez cette erreur particulière parce que bash analyse vos arguments (20,3) comme ceci:

$ echo (20,3)
bash: syntax error near unexpected token `20,3'

Pour transmettre les crochets sous forme de chaîne, vous devez les échapper:

$ echo \(20,3\) '(1,2)'
(20,3) (1,2)

Mais cela ne fonctionnera toujours pas comme par magie en tant que code Python - vous devrez analyser les arguments de la ligne de commande dans votre programme Python (enregistrer sous x.py):

import sys

def fn(a,b):
  print a+b

eval(sys.argv[1])

Ensuite:

$ python x.py 'fn(0,13)'
13
1
bain