Exécution d'un script python à partir d'un terminal sans extension .py

14

Je veux appeler un script python script.py à partir du terminal en tapant simplement script . Est-ce possible? Si c'est le cas, comment?

Je sais que je peux éviter de taper python script.py en ajoutant #! / Usr / bin / env python en haut du script, mais je dois encore ajouter le suffixe .py pour exécuter le script.

jmau5
la source

Réponses:

21

Les systèmes de fichiers Unix / Linux ne dépendent pas des extensions comme le fait Windows. Vous ne devriez pas avoir besoin .pyde la fin d'un fichier pour l'exécuter.

Vous pouvez exécuter le fichier en l'appelant avec l'interpréteur:

python ScriptFile

Ou en le marquant comme exécutable et en définissant l'interpréteur sur la première ligne (par exemple #!/usr/bin/python).

Si vous ne parvenez pas à exécuter le fichier avec:

/Path/to/ScriptFile

vérifier les autorisations avec

ls -l ScriptFile

Vous devrez peut-être ajouter l'indicateur exécutable et chmodainsi il s'exécutera pour vous.

Si vous utilisez régulièrement des scripts personnalisés, vous pouvez vous assurer que le répertoire dans lequel vous les stockez est ajouté à la PATHvariable d'environnement.

Patrick
la source
1
Le fichier se trouve dans ~ / workspace / python. J'ai ajouté ~ / workspace / python à mon chemin, j'ai exécuté sudo chmod a + x script.py ", et j'ai ajouté la ligne shebang (#! / Usr / bin / env python) en haut du script .Je peux exécuter le script en tapant * script.py , mais simplement taper le script ne fonctionne pas.
jmau5
2
Sous unix / linux, tout est un fichier et répond à son nom de fichier. Vous ne pouvez pas appeler Script.py en tant que script. Essayez de renommer le fichier script.py en script et cela devrait résoudre votre problème.
Patrick
Désolé j'ai mal compris! Tout est résolu, merci!
jmau5
5

L' .pyextension n'est pas nécessaire pour exécuter le script. Il suffit de rendre le script exécutable (par exemple en exécutant chmod a+x script) et d'ajouter la ligne shebang ( #!/usr/bin/env python).

daniel kullmann
la source
Voir mon commentaire sur la réponse de Patrick.
jmau5
4

En option, vous pouvez créer un wrapper pour votre script (un .pyfichier):

Par exemple, vous avez un script runme.pyafin que vous puissiez créer un nouveau fichier runmepour envelopper le script:

#!/usr/bin/env python
import runme

puis appelez la runme.pyfonctionnalité en appelant simplement runmedans le shell.

Cela est utile pour les scripts multiplateformes, car sur la plate-forme Windows, vous pouvez attribuer des .pyfichiers à appeler juste par nom sans extension et shebang dans l'en-tête, mais sur la plate-forme linux vous ne pouvez pas et ainsi le wrapper sort.

tour
la source