Exécution du script python à partir du terminal Linux

J'ai téléchargé ce script appelé, pyAES.py et je l'ai mis dans un directory de noms de code, dans un directory de bureau de mon Linux,

Selon cet exemple, http://brandon.sternefamily.net/2007/06/aes-tutorial-python-implementation/

Quand je tape,

./pyAES.py -e testfile.txt -o testfile_encrypted.txt 

le file pyAES.py doit être exécuté. mais j'obtiens cette erreur,

 pi@raspberrypi ~/Desktop/Codes $ pyAES.py -bash: pyAES.py: command not found 

la sortie de la command ls -l est,

 pi@raspberrypi ~/Desktop/Codes $ ls -l total 16 -rw-r--r-- 1 pi pi 14536 Oct 8 10:44 pyAES.py 

Voici la sortie après chmod +x

 pi@raspberrypi ~/Desktop/Codes $ chmod +x pyAES.py pi@raspberrypi ~/Desktop/Codes $ pi@raspberrypi ~/Desktop/Codes $ pyAES.py -bash: pyAES.py: command not found pi@raspberrypi ~/Desktop/Codes $ 

et la command, chmod +x pyAES.py && ./pyAES.py donne l'erreur suivante,

 -bash: ./pyAES.py: /usr/bin/python2: bad interpreter: No such file or directory 

J'ai également essayé de déplacer le file dans le /usr/bin , puis de l'exécuter,

 pi@raspberrypi /usr/bin $ pyAES.py -bash: /usr/bin/pyAES.py: /usr/bin/python2: bad interpreter: No such file or directory pi@raspberrypi /usr/bin $ 

Je peux voir le file est présent dans le directory / usr / bin mais il donne toujours une erreur que pas de tel file ou directory.

Je veux savoir pourquoi le terminal Linux n'exécute pas le script python?

Il semble que vous avez une ligne de shebang mal écrite. De l'erreur que vous obtenez:

 -bash: /usr/bin/pyAES.py: /usr/bin/python2: bad interpreter: No such file or directory 

Je dirais que vous devriez définir la première ligne de /usr/bin/pyAES.py à

 #!/correct/path/to/python 

où le /correct/path/to/python peut être trouvé à partir de la sortie de:

 type -P python 

C'est /usr/bin/python (pas /usr/bin/python2 ) sur mon système.

Le premier obstacle est que vous devez dire au shell où find le programme. Si vous ne placez aucune indication de directory, vous ne pouvez exécuter que des files exécutables situés dans le path de search exécutable décrit par les variables d'environnement PATH . Le directory actuel ne se trouve pas dans le path de search, sauf si vous le mettez là. Alors lancez ./pyAES.py .

Pour exécuter un programme, vous devez disposer des permissions d'exécution:

 chmod +x pyAES.py 

Si vous obtenez un message comme «mauvais interprète: pas de file ou de directory» ou simplement «aucun file ou directory» sur un file existant, cela signifie qu'il y a une erreur dans la ligne de script du script. (Voir / bin / sh: ./check-dependencies.pl: non trouvé – mais check-dependencies.pl existe! Pour une explication plus détaillée.) La ligne shebang est la première ligne du script et indique l'location de l'interpréteur .

Pour éviter de coder en dur le path vers un interpréteur (par exemple /usr/bin/python ou /usr/local/bin/python ), vous pouvez utiliser le programme /usr/bin/env comme trampoline:

 #!/usr/bin/env python 

PEP 304 spécifie que #!/usr/bin/env python2 est la reference pour Python 2.x. Cependant il y a beaucoup de systèmes existants où Python 2.x est seulement fourni sous le nom python et non python2 . Donc, vous devrez peut-être jongler entre les deux. Si vous disposez d'permissions root et que votre dissortingbution fournit uniquement Python 2.x en tant que python ou uniquement python2 , créez un lien symbolique vers l'autre nom.

Si vous voyez l'erreur ": No such file or directory" (avec rien avant les deux-points), cela signifie que votre ligne shebang a un return chariot à la fin, probablement parce qu'il a été édité sous Windows. Supprimer le CR: la ligne shebang doit avoir une fin de ligne Unix (saut de ligne seulement).

L'erreur "command not found" vous obtenez parce que cet exécutable n'existe pas dans /bin/ ou /usr/bin/ all paths dans la variable $PATH .

Lorsque vous exécutez une command, dans le shell backend search ce file exécutable / binary dans PATH, par exemple. /bin/ /usr/bin/ etc …

Donc, si le path n'est pas défini correctement, vous serez confronté à ce problème.

et quand vous utilisez " ./command " alors il exécutera cette command à partir de direcotry en cours, la variable PATH n'est pas utilisée pour searchr le nom de file

La première ligne de votre file python devrait aimer ceci:

 #!/usr/bin/python 

Cette ligne montre linux quel interprète utiliser. Si vous ne connaissez pas le path vers python, tapez:

 which python 

et ajoutez le path à la première ligne (exemple "#! / PATH"). Le file doit être exécutable, vous l'avez fait avec "chmod + x NAME.py". Ensuite, ajoutez le file (copyz ou créez un lien symbolique) dans un dossier répertorié dans votre variable d'environnement PATH (exemple: "/ usr / bin" ou "/ usr / local / bin").