J'utilise la fonction input
du module fileinput
pour accepter le script via pipes
ou input file
Voici le script minimum:
finput.py
import fileinput
with fileinput.input() as f:
for line in f:
print(line)
Après avoir rendu ce script exécutable, j'exécute ls | ./finput.py
et obtenir unexpected error message
./finput.py: line 1: import: command not found
./finput.py: line 3: syntax error near unexpected token `('
./finput.py: line 3: `with fileinput.input() as f:'
Le seul correctif que j'ai trouvé est lorsque j'ajoute #!/usr/bin/env/python3
avant l'instruction d'importation.
Mais ce problème semble être lié uniquement au module fileinput
. Puisque le script suivant a bien fonctionné sans Shebang
:
fruit.py
import random
fruits = ["mango", "ananas", "Apple"]
print(random.choice(fruits))
Maintenant qu'est-ce qui me manque? Pourquoi la commande import
ne peut-elle pas être trouvée car la Shebang
n'est pas obligatoire dans finput.py
?
Votre besoin de dire à votre système d'exploitation qu'il s'agit d'un programme Python, sinon, il est interprété comme un script Shell (où la commande import
est introuvable).
Comme vous l'avez identifié, cela se fait en utilisant une ligne Shebang:
#!/usr/bin/env python3
Cela n'est nécessaire que si vous allez exécuter votre script comme ceci: ./script.py
, qui indique à votre système d'exploitation "d'exécuter cet exécutable". Pour ce faire, votre système d'exploitation doit identifier comment il est censé exécuter le programme, et il s'appuie sur la ligne Shebang pour cela (entre autres).
Cependant, si vous exécutez python script.py
(ce que je suppose que vous avez fait pour fruit.py
), alors Python ne demande pas à votre système d'exploitation si c'est un programme Python ou non, donc la ligne Shebang n'a pas d'importance.).