Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

bash et lancement script python

2 réponses
Avatar
Alain Rpnpif
Bonjour,

Depuis toujours quand je mettais en premi=C3=A8re ligne d'un script python :
#!/usr/bin/python

Python =C3=A9tait lanc=C3=A9 sur le script.
Pourquoi maintenant (Debian Squeeze), la commande ./monscript.py donne :
line 1: =EF=BB=BF#!/usr/bin/python: Aucun fichier ou dossier de ce type

$ sh ./monscript.py=20
./monscript.py: 1: =EF=BB=BF#!/usr/bin/python: not found

$ bash ./monscript.py=20
./monscript.py: line 1: =EF=BB=BF#!/usr/bin/python: Aucun fichier ou dossie=
r de ce type

$ which python
/usr/bin/python

python monscript.py marche. Je ne comprends pas.
Auriez-vous une explication ?

--=20
Alain Rpnpif

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/20110423170329.5b288ff2@arrcuis.home

2 réponses

Avatar
Jean-Jacques Doti
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).

A+
Jean-Jacques

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Alain Rpnpif
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 pyt hon
> :
> #!/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 do ssier
> 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, l a
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éc imal (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 m ais 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 e nregistré 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

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/