Executando script python a partir do terminal sem extensão .py

14

Eu quero chamar um script python script.py do terminal simplesmente digitando script . Isso é possível? Se sim, como?

Eu sei que posso evitar digitar python script.py adicionando #! / Usr / bin / env python na parte superior do script, mas ainda preciso adicionar o sufixo .py para executar o script.

jmau5
fonte

Respostas:

21

Os sistemas de arquivos Unix / Linux não dependem de extensões como o Windows. Você não precisa do .pyfinal de um arquivo para executá-lo.

Você pode executar o arquivo chamando-o com o intérprete:

python ScriptFile

Ou marcando-o como executável e definindo o intérprete na primeira linha (por exemplo #!/usr/bin/python).

Se você não conseguir executar o arquivo com:

/Path/to/ScriptFile

verifique as permissões com

ls -l ScriptFile

Pode ser necessário adicionar o sinalizador executável e chmodele será executado para você.

Se você estiver usando scripts personalizados regularmente, convém garantir que o diretório que você os armazena seja adicionado à PATHvariável de ambiente.

Patrick
fonte
1
O arquivo está em ~ / workspace / python. Adicionei ~ / workspace / python no meu caminho, executei o sudo chmod a + x script.py "e adicionei a linha shebang (#! / Usr / bin / env python) na parte superior do script . Eu posso executar o script digitando * script.py , mas apenas digitando roteiro não funciona.
jmau5
2
No unix / linux, tudo é um arquivo e responde ao seu nome de arquivo. Você não pode chamar Script.py como script. Tente renomear o arquivo de script.py para script e ele deve corrigir seu problema.
28411 Patrick
Desculpe, eu não entendi! Tudo resolvido, obrigado!
jmau5
5

A .pyextensão é desnecessária para executar o script. Você só precisa tornar o script executável (por exemplo, executando chmod a+x script) e adicionar a linha shebang ( #!/usr/bin/env python).

daniel kullmann
fonte
Veja meu comentário na resposta de Patrick.
jmau5
4

Como opção, você pode criar um invólucro para o seu script (um .pyarquivo):

Por exemplo, você tem um script runme.pypara poder criar um novo arquivo runmepara quebrar o script:

#!/usr/bin/env python
import runme

e chame a runme.pyfuncionalidade apenas chamando runmeno shell.

Isso é útil para scripts multiplataforma, pois na plataforma Windows você pode atribuir .pyarquivos a serem chamados apenas pelo nome, sem extensão e shebang no cabeçalho, mas na plataforma linux, não é possível e, assim, o wrapper sai.

torre
fonte