[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: bash et lancement script python



Le 23 avril 2011, Jean-Jacques Doti a écrit :

>  Salut,
> 
>  On Sat, 23 Apr 2011 17:03:29 +0200, Alain Rpnpif wrote:
> > Bonjour,
> >
> > Depuis toujours quand je mettais en première ligne d'un script python 
> > :
> > #!/usr/bin/python
> >
> > Python était lancé sur le script.
> > Pourquoi maintenant (Debian Squeeze), la commande ./monscript.py 
> > donne :
> > line 1: #!/usr/bin/python: Aucun fichier ou dossier de ce type
> >
> > $ sh ./monscript.py
> > ./monscript.py: 1: #!/usr/bin/python: not found
> >
> > $ bash ./monscript.py
> > ./monscript.py: line 1: #!/usr/bin/python: Aucun fichier ou dossier
> > de ce type
> >
> > $ which python
> > /usr/bin/python
> >
> > python monscript.py marche. Je ne comprends pas.
> > Auriez-vous une explication ?
> 
>  À tout hasard, est-ce que ton script aurait pu transiter par une 
>  machine Windows ou bien être transmis par mail ?
> 
>  Dans ce cas, il est possible que les fins de ligne Unix (LF) aient été 
>  remplacés par des fins de ligne Windows (CR-LF). Si c'est le cas, la 
>  première ligne de ton script est vue comme
>  #!/usr/bin/python<CR>
>  et c'est donc "/usr/bin/python<CR>" qui est cherché au lieu de 
>  "/usr/bin/python".
> 
>  Pour vérifier, affiche ton script avec un éditeur hexadécimal (ou tape 
>  "od -c -tx1 monscript.py" dans un terminal) et regarde si les "\n" sont 
>  précédés par des "\r".
> 
>  Au pire, lance simplement un "dos2unix monscript.py" : si le soucis est 
>  bien là, ça le réglera (et quoi qu'il en soit, ça ne casse rien).

Merci Jean-Jacques.

Le problème était bien de ce style : des octets non affichables mais en
début de fichier !

Le fichier litigieux :
00000000 EF BB BF 23 │ 21 2F 75 73 │ 72 2F 62 69 │ 6E 2F 70 79  .  #!/usr/bin/py
00000010 74 68 6F 6E │ 0A                                       thon

Un fichier qui se lance normalement :
00000000 23 21 2F 75 │ 73 72 2F 62 │ 69 6E 2F 70 │ 79 74 68 6F  #!/usr/bin/pytho
00000010 6E 0A                                                  n

C'est de ma faute : je l'avais affiché avec Abiword et bêtement enregistré ce qui a ajouté ces caractères (il aurait dû le laisser en format brut).

Un truc marrant : la commande file affiche ceci
1: Python script text executable
2: a /usr/bin/python script text executable
ce qui a pu trompé.

Encore merci.

-- 
Alain Rpnpif


Reply to: