web-dev-qa-db-fra.com

Shell Script: Exécuter un programme python depuis un script Shell

J'ai essayé de chercher la réponse sur Google, mais sans succès.

Je dois utiliser mon ordinateur supercalculateur Works, mais pour que mon script python s'exécute, il doit être exécuté via un script Shell.

Par exemple, je veux que job.sh exécute python_script.py

Comment cela peut-il être accompli?

85
Harpal

Assurez-vous simplement que l'exécutable python est dans votre variable d'environnement PATH, puis ajoutez-le dans votre script.

python path/to/the/python_script.py

Détails:

  • Dans le fichier job.sh, mettez ceci
#!/bin/sh
python python_script.py
  • Exécutez cette commande pour rendre le script exécutable pour vous: chmod u+x job.sh
  • Exécutez-le: ./job.sh
131

Méthode 1 - Créer un script shell:

Supposons que vous ayez un fichier python hello.py Créez un fichier appelé job.sh qui contient

#!/bin/bash
python hello.py

marquez-le comme exécutable en utilisant

$ chmod +x job.sh

puis lancez-le

$ ./job.sh

Méthode 2 (mieux) - Faites en sorte que le python s'exécute à partir de Shell:

Modifiez votre script hello.py et ajoutez-le comme première ligne

#!/usr/bin/env python

marquez-le comme exécutable en utilisant

$ chmod +x hello.py

puis lancez-le

$ ./hello.py
85
João Víctor

À mon humble avis 

python /path/to/script.py

Est tout à fait faux, surtout en ces jours. Quel python? python2.6? 2,7? 3,0? 3,1? La plupart du temps, vous devez spécifier la version de python dans la balise Shebang du fichier python. J'encourage à utiliser 

#!/usr/bin/env python2 # ou python2.6 ou python3 ou même python3.1
pour la compatibilité.

Dans ce cas, il est préférable d’exécuter le script et de l’appeler directement:

 #!/bin/bash 

/chemin/vers/script.py 

Ainsi, la version de Python dont vous avez besoin n’est écrite que dans un fichier. De nos jours, la plupart des systèmes ont python2 et python3 et il arrive que le lien symbolique python pointe vers python3 , alors que la plupart des gens s’attendent à ce qu’il pointe vers python2 .

8
Enrico Carlesso

Cela fonctionne mieux pour moi: ajoutez-le en haut du script:

#!c:/Python27/python.exe

(C:\Python27\python.exe est le chemin du python.exe sur ma machine) Ensuite, exécutez le script via:

chmod +x script-name.py && script-name.py
3
peterb

vous devriez pouvoir l'invoquer en tant que python scriptname.py

par exemple 

# !/bin/bash

python /home/user/scriptname.py 

assurez-vous également que le script est autorisé à exécuter

vous pouvez le rendre exécutable en utilisant chmod u + x scriptname.py

EDIT: battu à elle :-p

3
Shpongle

Enregistrez le programme suivant sous le nom print.py:

#!/usr/bin/python3
print('Hello World')

Puis dans le type de terminal:

chmod +x print.py
./print.py
2
Nishant Ingle

Cela fonctionne pour moi: 

  1. Créez un nouveau travail de fichier Shell. Donc, disons: touch job.sh et ajoutez une commande pour exécuter un script python (vous pouvez même ajouter des arguments de ligne de commande à ce python, je prédéfinis généralement mes arguments de ligne de commande).

    chmod +x job.sh

  2. Dans job.sh, ajoutez les fichiers py suivants, par exemple: 

    python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file.py" 

    python_file1.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file1.py"

Done with python_file.py

Done with python_file1.py

J'utilise cela généralement lorsque je dois exécuter plusieurs fichiers python avec des arguments différents, prédéfinis. 

_ {Note: Juste un bref aperçu de ce qui se passe ici: 

python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "completed with python_file.py" . 

  • Ici, le script shell exécutera le fichier python_file.py et ajoutera plusieurs fichiers arguments en ligne de commande au moment de l’exécution dans le fichier python. 
  • Cela ne signifie pas nécessairement que vous devez également passer des arguments en ligne de commande. 
  • Vous pouvez simplement l'utiliser comme suit: python python_file.py, tout simplement. Ensuite, le >> va imprimer et stocker le résultat de ce fichier .py dans le fichier testpy-output.txt. 
  • && est un opérateur logique qui ne s'exécutera qu'une fois que l'opération ci-dessus aura été exécutée avec succès. En tant qu'option echo _ "terminée avec python_file.py" sera répercutée sur votre cli/terminal lors de l'exécution. temps. 
2
geekidharsh

J'utilise ceci et ça marche bien

#/bin/bash
/usr/bin/python python python_script.py
1
Max Hay

Puisque les autres messages disent tout (et je suis tombé sur ce message en cherchant ce qui suit). 
Voici un moyen d'exécuter un script python à partir d'un autre script python:

Python 2:

execfile("somefile.py", global_vars, local_vars)

Python 3:

with open("somefile.py") as f:
    code = compile(f.read(), "somefile.py", 'exec')
    exec(code, global_vars, local_vars)

et vous pouvez fournir des arguments en fournissant un autre sys.argv

0
dCSeven