2009-10-10 8 views
4

J'ai écrit un script de validation de publication en python, "c: \ myfolder \ myscript.py". Je veux l'invoquer à partir du script post-commit. Cela ne trouve pas:Comment puis-je obtenir mon script post-commit de git (msysgit on windows) pour appeler mon script python en tant que python plutôt que bash?

#!/bin/sh 
c:\myfolder\myscript.py 

bash pense que la commande c: myfoldermyscript.py - les barres obliques DROPpé.

Alors, j'ai essayé des barres obliques avant:

#!/bin/sh 
c:/myfolder/myscript.py 

Mais il semble que bash pense que mon fichier .py lui-même est un script bash, et si je reçois des erreurs bash comme il essaie de l'interpréter à tort.

Répondre

6

La première ligne d'un script est appelé Shebang, et le seul problème avec elle est:

Shebangs spécifient des chemins absolus à executables du système; Cela peut provoquer des problèmes sur les systèmes dotés de dispositions de système de fichiers non standard.
Même lorsque les systèmes ont des chemins assez standard, il est tout à fait possible que les variantes du même système d'exploitation aient des emplacements différents pour l'interpréteur souhaité.

La seule autre façon serait d'appeler python directement dans votre script

#!/bin/sh 
C:/apps/Python25/python c:/myfolder/myscript.py 

Quoi qu'il en soit, des barres obliques vers l'avant sont dans l'ordre: c'est une session bash qui est utilisé pour exécuter Git et ses crochets.
L'intérêt d'appeler directement l'interpréteur python serait de le remplacer par une variable d'environnement:

#!/bin/sh 
$PYTHON_HOME/python $SCRIPT_FOLDER/myscript.py 
+0

Ce que vous avez écrit est logique. Ainsi, le mécanisme Windows d'une extension de fichier, "py", étant associé à un exécutable, "python.exe", de sorte que "l'exécution" du fichier py appelle python.exe, ce mécanisme ne peut pas être accroché à partir de Windows sessions bash -ignorant, non? –

+0

À droite, l'association de fichier Windows ne fonctionnerait pas dans une session bash. Mais "python" seul (ou "python.exe") pourrait fonctionner, si "C:/apps/Python25" se trouve dans votre variable d'environnement PATH. – VonC

+0

@VonC - en regardant votre profil d'utilisateur, je me demande si cela vous dérangerait de jeter un oeil à cette question et d'ajouter vos 2 cents, si vous pensez différemment de ce qui est déjà là: http://stackoverflow.com/questions/1484153/how-does-bug-tracker-version-contrôle-intégration-travail-avec-typique-git-workflows –

5

Ajouter ce qui suit, le chemin de mon interpréteur Python, comme la première ligne de mon script python travaillé:

 
#!C:/apps/Python25/python 

Y at-il de meilleures façons?

+0

Cela fonctionne parce que le Shebang spécifie l'emplacement de l'interpréteur du fichier de script, dans ce cas 'Python', au lieu de 'Bash'. [link] (http://en.wikipedia.org/wiki/Shebang_%28Unix%29) – Nathan

Questions connexes