Script Shell: exécutez un programme python à partir d'un script shell

139

J'ai essayé de googler la réponse mais sans succès.

Je dois utiliser le serveur de mon ordinateur de travail, mais pour que mon script python s'exécute, il doit être exécuté via un script shell.

Par exemple, je veux job.shexécuterpython_script.py

Comment cela peut-il être accompli?

Harpal
la source
2
Avez-vous simplement essayé de mettre python python_script.pyvotre script shell?
thkala
Um, python python_script.py. Ou juste ./python_script.pysi le script a un shebang.
2
@delnan: ./python_script.py nécessite également que le script soit exécutable
thkala
qu'avez-vous essayé exactement et quel est le problème? Soit vous n'avez pas fait le bien d'une recherche Google, soit il y a beaucoup de choses que vous ne nous
dites
3
C'est une question assez ancienne, mais la réponse la meilleure / la plus complète est celle de João Víctor. Assurez-vous de le lire.
Still.Tony

Réponses:

194

Assurez-vous simplement que l'exécutable python se trouve dans votre variable d'environnement PATH, puis ajoutez-y 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écuter : ./job.sh
Jean-Bernard Jansen
la source
2
Cela dépend de votre système. Python 3 peut être le runtime python par défaut, ou peut ne pas l'être. Vous pouvez vérifier en exécutant python --version, et vous pouvez appliquer la version avec python3 hello.py.
Jean-Bernard Jansen
Que faire s'il ne trouve pas les importations déjà installées, telles que les pandas?
mah65
Cela signifie que vous avez lancé le mauvais binaire python ou que l'environnement n'est pas correct. Dans ce cas, vous devez remplir un virtualenv, puis exécuter source PATH/TO/VENV/bin/activatepuis appelerpython python_script.py
Jean-Bernard Jansen
J'essaye de faire ceci dans l'automate, et j'obtiens une erreur; /path/to/Python: can't open file '/path/to/script': [Errno 1] Operation not permittedexiste-t-il un moyen d'inclure mon code python en ligne dans le script bash?
Keyslinger le
111

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

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

#!/bin/bash
python hello.py

le marquer comme exécutable en utilisant

$ chmod +x job.sh

puis lancez-le

$ ./job.sh

Méthode 2 (MIEUX) - Faites fonctionner le python lui-même à partir du shell:

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

#!/usr/bin/env python

le marquer comme exécutable en utilisant

$ chmod +x hello.py

puis lancez-le

$ ./hello.py
Joao Victor
la source
5
Veuillez modifier votre réponse pour la rendre plus lisible. Vous pouvez utiliser le bouton 101010 dans l'éditeur de réponses pour marquer le contenu du script comme code.
thkala
1
J'oublie toujours #!/usr/bin/env python. N'oubliez pas de vous assurer que vous faites référence à la bonne version de python + chemin pour votre système!
Still.Tony
10

Imho, écrire

python /path/to/script.py

Est tout à fait faux, surtout de nos jours. Quel python? python2.6? 2,7? 3.0? 3.1? La plupart du temps, vous devez spécifier la version python dans la balise shebang du fichier python. J'encourage à utiliser

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

Dans ce cas, il est préférable d'avoir le script exécutable et de l'invoquer directement:

#! / bin / bash

/path/to/script.py

De cette façon, la version de python dont vous avez besoin n'est écrite que dans un seul fichier. La plupart des systèmes de nos jours ont python2 et python3 entre-temps, 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 .

Enrico Carlesso
la source
1
Pouvez-vous passer des paramètres de la même manière qu'avec python script.py param?
kristian
@kristian yes./abc.py -h
7

Enregistrez le programme suivant sous print.py:

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

Puis dans le type de terminal:

chmod +x print.py
./print.py
Nishant Ingle
la source
4

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

#!c:/Python27/python.exe

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

chmod +x script-name.py && script-name.py
Peterb
la source
Juste pour clarifier, ceci est spécifique à Windows. Et l'invite que j'utilise est le Git bash. Je trouve ça super utile. Surtout dans l'environnement Windows
peterb
4

Cela fonctionne pour moi:

  1. Créez un nouveau travail de fichier shell. Alors disons: touch job.shet 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. À l'intérieur, job.shajoutez les fichiers py suivants, disons:

    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"

La sortie de job.sh devrait ressembler à ceci:

Done with python_file.py

Done with python_file1.py

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

Remarque: Juste un petit 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 arguments de ligne de commande au moment de l'exécution au fichier python.
  • Cela ne signifie pas nécessairement que vous devez également transmettre des arguments de ligne de commande.
  • Vous pouvez simplement l'utiliser comme python python_file.py:, clair et simple. Ensuite, le >> imprimera et stockera la sortie de ce fichier .py dans le fichier testpy-output.txt.
  • && est un opérateur logique qui ne s'exécutera qu'après l'exécution réussie de ce qui précède et comme un écho facultatif "complété par python_file.py" sera renvoyé à votre cli / terminal au moment de l'exécution.
geekidharsh
la source
4

Vous devriez pouvoir l'invoquer comme python scriptname.pypar exemple

# !/bin/bash

python /home/user/scriptname.py 

Assurez-vous également que le script dispose des autorisations nécessaires pour s'exécuter.

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

Shpongle
la source
2

J'utilise ça et ça marche bien

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

Puisque les autres messages disent tout (et je suis tombé sur ce post 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 d'autres sys.argv

dCSeven
la source