Executando o script python do Terminal Linux

7

Eu baixei este script chamado pyAES.py e coloquei em um nome de pasta, dentro de um diretório Desktop do meu Linux,

De acordo com este exemplo, link

Quando eu digito,

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

o arquivo pyAES.py deve ser executado. mas estou recebendo esse erro,

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

a saída do comando ls -l é,

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

Aqui está a saída apó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 $

e o comando chmod +x pyAES.py && ./pyAES.py apresenta o seguinte erro

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

Eu também tentei mover o arquivo no diretório /usr/bin e depois executá-lo,

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 $

Eu posso ver o arquivo está presente no diretório / usr / bin, mas ainda está dando um erro que não existe tal arquivo ou diretório.

Eu quero saber porque o terminal Linux não está executando o script python?

    
por Sufiyan Ghori 08.10.2013 / 13:21

4 respostas

5

Parece que você tem uma linha de shebang mal escrita. Do erro que você está recebendo:

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

Eu diria que você deve definir a primeira linha de /usr/bin/pyAES.py para

#!/correct/path/to/python

onde o /correct/path/to/python pode ser encontrado na saída de:

type -P python

É /usr/bin/python (não /usr/bin/python2 ) no meu sistema.

    
por 08.10.2013 / 13:54
3

O primeiro obstáculo é que você precisa dizer ao shell onde encontrar o programa. Se você não colocar nenhuma indicação de diretório, só poderá executar arquivos executáveis localizados no caminho de pesquisa executável descrito pelas variáveis de ambiente PATH . O diretório atual não está no caminho de pesquisa, a menos que você o coloque lá. Então, execute ./pyAES.py .

Para executar um programa, você deve ter permissões de execução:

chmod +x pyAES.py

Se você receber uma mensagem como "intérprete incorreto: Nenhum arquivo ou diretório" ou simplesmente "Nenhum arquivo ou diretório" em um arquivo existente, isso significa que há um erro no script shebang linha. (Consulte / bin / sh: ./check-dependencies.pl: não encontrado - mas existe o check-dependencies.pl! para uma explicação mais detalhada.) A linha shebang é a primeira linha do script e indica a localização de o intérprete.

Para evitar a codificação do caminho para um intérprete (por exemplo, /usr/bin/python ou /usr/local/bin/python ), você pode usar o programa /usr/bin/env como um trampolim:

#!/usr/bin/env python

PEP 304 especifica que #!/usr/bin/env python2 é o imediato para se referir ao Python 2.x . No entanto, existem muitos sistemas existentes em que o Python 2.x é fornecido apenas com o nome python e não python2 . Então você pode ter que fazer malabarismos entre os dois. Se você tiver permissões de root e sua distribuição fornecer apenas Python 2.x como python ou apenas fornecer python2 , crie um link simbólico para o outro nome.

Se você vir o erro ": Nenhum arquivo ou diretório" (com nada antes dos dois pontos), isso significa que sua linha shebang tem um retorno de carro no final, presumivelmente porque foi editada no Windows. Remova o CR: a linha shebang precisa ter uma terminação do Unix (apenas alimentação de linha).

    
por 09.10.2013 / 03:03
2

O erro "command not found" que você está obtendo porque esse executável não existe em /bin/ ou /usr/bin/ todos os caminhos na variável $PATH .

Quando você executa qualquer comando, no shell de back-end pesquisa esse executável / binário no PATH, por exemplo. /bin/ /usr/bin/ etc ...

Portanto, se o caminho não for definido corretamente, você enfrentará esse problema.

e quando você usar " ./command ", ele executará esse comando a partir do diretório atual, a variável PATH não será usada para procurar o nome do arquivo

    
por 08.10.2013 / 13:31
2

A primeira linha do seu arquivo python deve ser assim:

#!/usr/bin/python 

Essa linha mostra o linux que o intérprete deve usar. Se você não souber o caminho para python, digite:

which python

e adicione o caminho para a primeira linha (exemplo "#! / PATH"). O arquivo tem que executável, você fez isso com "chmod + x NAME.py". E, em seguida, adicione o arquivo (apenas copie ou crie um link simbólico) em uma pasta listada em sua variável env PATH (exemplo "/ usr / bin" ou "/ usr / local / bin").

    
por 08.10.2013 / 14:03