Python Rodando um Programa (.py)
Um programa Python é um arquivo de texto, com o nome terminado em .py, que o interpretador python3 lê e executa. Nesta aula você vai fazer o ciclo completo pela primeira vez: criar uma pasta para os seus programas, escrever um arquivo com o editor nano, rodá-lo com python3 ola.py e entender o que o terminal responde, inclusive quando ele não acha o arquivo. No fim, você vai transformar o arquivo num comando que roda sozinho, com a linha #!/usr/bin/env python3.
- A criar uma pasta para os seus programas e um arquivo
.pycom onano. - A rodar o programa com
python3 arquivo.py, e o que cada parte do comando quer dizer. - O que é a pasta atual e como chegar a um arquivo que está em outra pasta (caminhos).
- Que o Python executa o arquivo de cima para baixo, e para no primeiro erro.
- O que é o código de saída (
echo $?). - A rodar o arquivo como um comando, com
#!/usr/bin/env python3echmod +x. - Outras formas de rodar:
python3 -c,python3 -ie o editor do guia.
A ideia: a receita e o cozinheiro
Pense numa receita escrita num caderno. Ela fica guardada na gaveta, e você pode ler, corrigir e copiar quantas vezes quiser; mas a receita não cozinha sozinha. Quando chega a hora, alguém abre o caderno na página certa e segue os passos, um por um, de cima para baixo.
No Python é igual:
| Na cozinha | No computador |
|---|---|
| A receita escrita | O arquivo ola.py, com o seu programa |
| O caderno guardado na gaveta | A pasta onde o arquivo está, por exemplo /home/ana/python |
| O cozinheiro | O interpretador python3 |
| "Cozinheiro, faça a receita da página tal" | O comando python3 ola.py, digitado no terminal |
Se você mandar o cozinheiro fazer uma receita que não está no caderno que ele tem na mão, ele responde "não achei". Você vai ver essa resposta, com as palavras do Python, logo adiante.
1. Uma pasta para os seus programas
Antes de escrever, crie uma pasta só para os programas do curso. Assim eles não se misturam com as fotos e os documentos. Abra o terminal (Ctrl+Alt+T):
$ mkdir python « cria a pasta "python" $ cd python « entra nela $ pwd « "onde estou?" /home/ana/python $ ls « o que tem aqui? (nada, ainda)
- mkdir python
- make directory, "crie uma pasta" chamada
python. Ela é criada dentro da pasta onde você está; o terminal sempre começa na sua pasta pessoal,/home/ana. - cd python
- change directory, "mude de pasta": entre na pasta
python. Repare que o prompt mudou de~para~/python(o~é o apelido da sua pasta pessoal). - pwd
- print working directory, "mostre a pasta atual".
- ls
- list, "liste o que tem aqui". A pasta é nova, então não aparece nada.
A pasta atual é como o caderno que está aberto em cima da mesa: quando você fala só o nome de um arquivo, o terminal (e o Python) procuram nessa pasta. Lembre-se disso; é a causa do erro mais comum desta aula.
2. Escrevendo o arquivo com o nano
O nano é um editor de texto que roda dentro do próprio terminal. Ele já vem no Ubuntu. Para criar (ou abrir) o arquivo ola.py:
$ nano ola.py
O terminal vira o editor. Digite as duas linhas do programa, exatamente assim (com os parênteses e as aspas):
print("Olá, mundo!")
print("Meu primeiro programa em Python.")
A tela do nano fica assim (a tela inteira tem mais linhas em branco no meio):
GNU nano 8.7.1 ola.py
print("Olá, mundo!")
print("Meu primeiro programa em Python.")
[ 2 linhas lidas ]
^G Ajuda ^O Gravar ^F Onde está?^K Recortar ^T Executar ^C Local
^X Sair ^R Ler o arq ^\ Substituir^U Colar ^J Justificar^/ Ir p/ linha
ola.py aberto. Embaixo, os atalhos; o ^ quer dizer a tecla Ctrl.As duas linhas de baixo são a "cola" dos atalhos. O ^ quer dizer Ctrl: ^O é Ctrl+O. Você só precisa de dois:
- Gravar: aperte Ctrl+O. Embaixo aparece
Escrever para o arquivo: ola.py; aperte Enter para confirmar. O nano responde com quantas linhas gravou. - Sair: aperte Ctrl+X. Você volta para o terminal. (Se você tentar sair sem gravar, o nano pergunta se quer salvar as mudanças: responda S para sim ou N para não.)
De volta ao terminal, confira que o arquivo existe e o que tem dentro dele. O cat mostra o conteúdo de um arquivo:
$ ls
ola.py
$ cat ola.py
print("Olá, mundo!")
print("Meu primeiro programa em Python.")
.py?
A extensão .py é a etiqueta que diz "isto é um programa Python". Os editores usam a etiqueta para colorir o código, os outros programadores sabem o que é o arquivo só de olhar o nome, e o Python precisa dela para os módulos que você vai criar mais tarde. Para rodar com python3 arquivo, a extensão nem é obrigatória (o Python lê qualquer arquivo de texto), mas use sempre: é o costume, e evita confusão.
3. Rodando: python3 ola.py
Agora, o momento esperado. Ainda dentro da pasta python:
$ python3 ola.py Olá, mundo! Meu primeiro programa em Python.
- python3
- O interpretador: o "cozinheiro".
- ola.py
- O arquivo que ele deve ler e executar: a "receita". Como foi escrito só o nome, ele é procurado na pasta atual.
O Python leu a primeira linha do arquivo e mostrou Olá, mundo!; leu a segunda e mostrou Meu primeiro programa em Python.; chegou ao fim do arquivo e terminou, devolvendo o prompt ($) para você. As aspas e os parênteses não aparecem: eles são a "embalagem" do texto, só para o Python saber onde a frase começa e termina (aula print()).
O arquivo continua lá, guardado. Rode quantas vezes quiser; mude o texto no nano e rode de novo para ver a diferença. Esse é o ciclo de todo programador: editar → gravar → rodar → olhar o resultado.
No editor do guia é a mesma coisa
As caixas Experimente fazem esse ciclo para você: o código da caixa é gravado num arquivo chamado main.py, e o botão Rodar faz o equivalente a python3 main.py, com o Python 3.14 de verdade, no navegador. A aula O Editor do Guia mostra tudo o que ele faz.
Missão: acrescente uma terceira linha ao programa, com um print que mostre Meu nome é e o seu nome (por exemplo, Meu nome é Ana.). Rode e confira as três linhas.
print("Olá, mundo!")
print("Meu primeiro programa em Python.")
print("Olá, mundo!")
print("Meu primeiro programa em Python.")
print("Meu nome é Ana.")
4. A pasta atual e os caminhos
Agora a Ana voltou para a pasta pessoal (o cd sozinho leva para lá) e tentou rodar o mesmo programa:
$ cd $ pwd /home/ana $ python3 ola.py python3: can't open file '/home/ana/ola.py': [Errno 2] No such file or directory
- python3:
- Quem está reclamando: o próprio
python3, antes mesmo de começar o programa. - can't open file
- "Não consigo abrir o arquivo".
- '/home/ana/ola.py'
- O arquivo que ele procurou: o
ola.pyda pasta atual,/home/ana. Esse caminho completo é a melhor pista: mostra onde o Python olhou. - [Errno 2]
- O número do erro no sistema: 2 quer dizer "não existe".
- No such file or directory
- "Arquivo ou pasta inexistente".
O arquivo não sumiu: ele está em /home/ana/python/ola.py, mas o Python procurou em /home/ana/ola.py. Há dois jeitos de resolver. O primeiro é entrar na pasta do arquivo (cd python) e rodar como antes. O segundo é dizer o caminho até o arquivo:
$ python3 python/ola.py « caminho a partir da pasta atual Olá, mundo! Meu primeiro programa em Python. $ python3 ~/python/ola.py « caminho a partir da pasta pessoal Olá, mundo! Meu primeiro programa em Python.
| Escrita | Quer dizer | Funciona de qualquer pasta? |
|---|---|---|
ola.py | O ola.py da pasta atual | Não: só se você estiver na pasta dele |
python/ola.py | Dentro da pasta python, que está na pasta atual (caminho relativo) | Não: só a partir de /home/ana |
~/python/ola.py | Dentro da pasta python da sua pasta pessoal | Sim |
/home/ana/python/ola.py | O caminho completo, desde a raiz / (caminho absoluto) | Sim |
Digite python3 ~/py e aperte Tab: o terminal completa o nome da pasta (~/python/). Aperte Tab de novo depois de o e ele completa ola.py. Se o Tab não completar, é sinal de que o arquivo não está onde você pensa. Usar o Tab evita a maioria dos erros de digitação em nomes de arquivo.
5. De cima para baixo, e o primeiro erro para tudo
O Python executa o arquivo uma linha de cada vez, de cima para baixo, como o cozinheiro seguindo a receita. Isso fica claro quando há um erro no meio. A Ana escreveu a lista de compras e esqueceu as aspas no feijão:
print("Lista de compras da Ana")
print("1. arroz")
print("2. " + feijao)
print("3. café")
$ python3 compras.py
Lista de compras da Ana « linha 1: rodou
1. arroz « linha 2: rodou
Traceback (most recent call last):
File "/home/ana/python/compras.py", line 3, in <module>
print("2. " + feijao)
^^^^^^
NameError: name 'feijao' is not defined
As duas primeiras linhas rodaram, e as frases apareceram. Na terceira, o Python encontrou um problema e parou ali: a quarta linha (o café) nunca chegou a ser executada. A mensagem, linha por linha:
- Traceback (most recent call last):
- "Rastro (a chamada mais recente por último)". É o começo de toda mensagem de erro que acontece com o programa já rodando. Por enquanto, leia como "deu erro; os detalhes vêm a seguir".
- File "/home/ana/python/compras.py", line 3, in <module>
- No arquivo
compras.py, linha 3. Oin <module>quer dizer "no corpo principal do arquivo" (e não dentro de uma função, que você vai aprender depois). - print("2. " + feijao)
- A linha 3, copiada do arquivo.
- ^^^^^^
- Embaixo de
feijao: é ali o problema. - NameError: name 'feijao' is not defined
- "Erro de nome: o nome
feijaonão está definido". Sem aspas, o Python acha quefeijaoé o nome de uma variável, e nenhuma variável com esse nome foi criada. Com aspas ("feijão"), seria um texto.
Dica de leitura: num traceback, comece pela última linha (o que deu errado) e depois suba para a linha do arquivo (onde foi). A aula Lendo uma Mensagem de Erro ensina a ler tracebacks maiores.
Missão: rode e veja o programa parar na linha 3. Conserte a linha (o feijão é um texto: precisa de aspas) e rode de novo, até aparecerem os três itens.
print("Lista de compras da Ana")
print("1. arroz")
print("2. " + feijao)
print("3. café")
print("Lista de compras da Ana")
print("1. arroz")
print("2. feijão")
print("3. café")
O código de saída
Todo programa, quando termina, devolve ao terminal um número, o código de saída: 0 quer dizer "terminei bem"; qualquer outro número quer dizer "deu problema". O terminal guarda esse número em $?, e o echo mostra:
$ python3 ola.py
Olá, mundo!
Meu primeiro programa em Python.
$ echo $?
0 « terminou bem
$ python3 compras.py
Lista de compras da Ana
1. arroz
Traceback (most recent call last):
File "/home/ana/python/compras.py", line 3, in <module>
print("2. " + feijao)
^^^^^^
NameError: name 'feijao' is not defined
$ echo $?
1 « terminou com erro
Você não precisa disso no dia a dia (a mensagem de erro já é bem clara), mas outros programas usam o código de saída para saber se o seu deu certo. O editor do guia também mostra esse número embaixo da saída de cada execução.
6. Rodando o arquivo como um comando
Os programas do sistema, como o ls, são rodados só pelo nome, sem python3 na frente. Dá para fazer o mesmo com os seus. A Ana tentou:
$ ./ola.py bash: ./ola.py: Permissão negada
O ./ quer dizer "o arquivo desta pasta" (o ponto é a pasta atual). O terminal achou o arquivo, mas recusou: no Linux, um arquivo só pode ser executado se tiver a permissão de execução, e um arquivo novo não tem. O chmod +x ("mude as permissões: acrescente execução") dá essa permissão:
$ chmod +x ola.py
$ ls -l ola.py
-rwxrwxr-x 1 ana ana 64 Oct 18 11:56 ola.py « os x quer dizer "pode executar"
$ ./ola.py
./ola.py: linha 1: erro de sintaxe próximo ao token inesperado `"Olá, mundo!"'
./ola.py: linha 1: `print("Olá, mundo!")'
Agora ele rodou, mas deu um erro estranho, em português. Repare que não é um traceback do Python: quem reclamou foi o bash, o programa do terminal. Sem saber quem deveria ler o arquivo, o terminal tentou executá-lo como se fosse uma lista de comandos do próprio terminal, e print("Olá, mundo!") não faz sentido para ele. Falta dizer, dentro do arquivo, quem é o cozinheiro.
A linha #!/usr/bin/env python3
Essa é a linha esquisita que você viu na Introdução, no programa do Ubuntu. Ela vai na primeira linha do arquivo, sozinha:
#!/usr/bin/env python3
print("Olá, mundo!")
print("Meu primeiro programa em Python.")
- #!
- Chamado de shebang (lê-se "xibéngue"). Quando um arquivo executável começa com esses dois caracteres, o Linux lê o resto da linha para saber qual programa deve abrir o arquivo.
- /usr/bin/env
- Um programa do sistema que procura outro programa pelo nome, nas pastas de comandos. Usar o
envem vez de escrever/usr/bin/python3direto faz o arquivo funcionar mesmo num computador em que o Python está em outra pasta (no macOS, por exemplo). - python3
- O programa que o
envdeve procurar e chamar.
Com a linha no lugar (a permissão continua lá, porque o arquivo é o mesmo):
$ cat ola.py
#!/usr/bin/env python3
print("Olá, mundo!")
print("Meu primeiro programa em Python.")
$ ./ola.py
Olá, mundo!
Meu primeiro programa em Python.
$ python3 ola.py « o jeito de sempre continua valendo
Olá, mundo!
Meu primeiro programa em Python.
Para o Python, a primeira linha começa com #, e tudo o que vem depois de um # é um comentário, que ele ignora (aula Comentários). Por isso a linha não atrapalha quando você roda com python3 ola.py.
./?
Sem o ./, o terminal procura o comando só nas pastas de comandos do sistema (como /usr/bin), e não na pasta atual:
$ ola.py ola.py: comando não encontrado
É uma proteção: assim, um arquivo qualquer numa pasta não consegue se passar por um comando do sistema. Para os seus programas, use ./ola.py (ou python3 ola.py).
7. Outras formas de rodar
python3 -c: uma linha, sem arquivo
Para testar uma linha só, sem criar arquivo, use -c (de command, "comando") e o código entre aspas simples:
$ python3 -c 'print("Olá, Ana!")'
Olá, Ana!
python3 -i: roda o arquivo e fica no Python
O -i (de interactive, "interativo") roda o arquivo e, em vez de terminar, abre o modo interativo (>>>), para você continuar experimentando:
$ python3 -i ola.py
Olá, mundo!
Meu primeiro programa em Python.
>>> print("Ainda estou no Python")
Ainda estou no Python
>>> exit()
Criar o arquivo sem abrir o editor
Para um programa de uma linha, dá até para criar o arquivo direto do terminal, com o echo e o > ("mande para o arquivo"):
$ echo 'print("Feito com echo!")' > rapido.py
$ python3 rapido.py
Feito com echo!
Cuidado: o > apaga o que havia no arquivo antes. Para programas de verdade, use um editor.
| Forma | Quando usar |
|---|---|
python3 arquivo.py | Quase sempre. Funciona em qualquer arquivo, sem preparar nada. É o que o guia usa |
./arquivo.py (com #! e chmod +x) | Programas que você vai usar como ferramenta, todo dia, como um comando do sistema |
python3 -c '...' | Testar uma linha rapidinho |
python3 -i arquivo.py | Rodar e depois investigar o que o programa deixou pronto |
| A caixa Experimente | Estudar as aulas e testar ideias sem sair do navegador |
python arquivo.py ou py arquivo.py | No Windows (aula Instalar o Python). No Ubuntu, python não existe |
Quando dá errado
$ python3 ol.py python3: can't open file '/home/ana/python/ol.py': [Errno 2] No such file or directory
O que aconteceu: o mesmo "não consigo abrir o arquivo" da seção 4, mas agora a pasta está certa e o nome, errado: ol.py em vez de ola.py. Leia o caminho entre aspas na mensagem: ele mostra exatamente o que o Python procurou.
Como resolver: confira com ls o nome exato do arquivo (maiúsculas contam: Ola.py e ola.py são arquivos diferentes no Linux) e use o Tab para completar.
A Ana salvou um programa como meu programa.py, com espaço:
$ python3 meu programa.py python3: can't open file '/home/ana/python/meu': [Errno 2] No such file or directory $ python3 "meu programa.py" « com aspas, funciona Olá, mundo! Meu primeiro programa em Python.
O que aconteceu: no terminal, o espaço separa as partes do comando. O python3 entendeu que o arquivo era meu (e que programa.py era outra coisa, passada para o programa). Repare no caminho da mensagem: /home/ana/python/meu.
Como resolver: ponha o nome entre aspas ou, melhor, não use espaços em nomes de programas. O costume em Python é o sublinhado: meu_programa.py.
$ mv "meu programa.py" meu_programa.py « mv renomeia o arquivo $ python3 meu_programa.py Olá, mundo! Meu primeiro programa em Python.
Permissão negada ao rodar com ./
$ ./ola.py bash: ./ola.py: Permissão negada
O que aconteceu: o arquivo não tem permissão de execução. Como resolver: chmod +x ola.py, uma vez só; ou rode com python3 ola.py, que não precisa dessa permissão.
erro de sintaxe próximo ao token inesperado
$ ./ola.py
./ola.py: linha 1: erro de sintaxe próximo ao token inesperado `"Olá, mundo!"'
./ola.py: linha 1: `print("Olá, mundo!")'
O que aconteceu: o arquivo foi executado com ./, mas não tem a linha #!/usr/bin/env python3 no começo (ou ela não está na primeira linha, ou está com um espaço antes do #!). O terminal tentou ler o Python como se fossem comandos do terminal. A pista: a mensagem é em português e não tem Traceback, então não veio do Python.
Como resolver: coloque #!/usr/bin/env python3 como primeira linha, sem nada antes, ou rode com python3 ola.py.
python3 ola.py dentro do >>>
O que aconteceu: o python3 ola.py é um comando do terminal (o $). Dentro do modo interativo (o >>>), quem lê é o Python, e ele responde com um SyntaxError. A aula O Modo Interativo (>>>) mostra a mensagem real e explica a diferença.
Como resolver: saia com exit() e digite o comando no $.
Missão: a receita fora de ordem
Missão: o Python segue o arquivo de cima para baixo, e a receita de bolo da Ana saiu com os passos trocados. Mude a ordem das linhas (sem mudar os textos) para os passos aparecerem na ordem 1, 2, 3.
print("Bolo simples da Ana")
print("1. Pré-aqueça o forno")
print("3. Leve ao forno por 40 minutos")
print("2. Misture os ingredientes")
print("Bolo simples da Ana")
print("1. Pré-aqueça o forno")
print("2. Misture os ingredientes")
print("3. Leve ao forno por 40 minutos")
Referência rápida
| Comando | O que faz |
|---|---|
mkdir python | Cria a pasta python |
cd python / cd | Entra na pasta / volta para a pasta pessoal |
pwd, ls | Mostra a pasta atual / lista o que tem nela |
nano ola.py | Abre (ou cria) o arquivo no editor. Ctrl+O, Enter grava; Ctrl+X sai |
cat ola.py | Mostra o conteúdo do arquivo |
python3 ola.py | Roda o programa (procurado na pasta atual) |
python3 ~/python/ola.py | Roda o programa pelo caminho, de qualquer pasta |
echo $? | Mostra o código de saída do último comando (0 = deu certo) |
#!/usr/bin/env python3 + chmod +x ola.py | Permite rodar com ./ola.py |
python3 -c '...' | Roda o código entre aspas, sem arquivo |
python3 -i ola.py | Roda o arquivo e abre o >>> no fim |
| Sintoma | Causa provável |
|---|---|
python3: can't open file '...': [Errno 2] No such file or directory | Pasta errada ou nome errado: leia o caminho na mensagem e confira com pwd e ls |
can't open file '.../meu' com um nome cortado | Espaço no nome do arquivo: use aspas ou _ |
bash: ./ola.py: Permissão negada | Falta o chmod +x |
linha 1: erro de sintaxe próximo ao token inesperado | Falta o #!/usr/bin/env python3 na primeira linha |
ola.py: comando não encontrado | Faltou o ./ antes do nome |
Algumas linhas aparecem e depois vem um Traceback | Normal: o Python rodou até a linha do erro e parou ali |
Exercícios
1. Rodar o programa
Complete o comando que roda o arquivo notas.py da pasta atual:
2. O shebang
Complete a primeira linha que permite rodar o arquivo com ./notas.py:
3. A permissão
Complete o comando que dá permissão de execução ao arquivo:
4. A Ana está em /home/ana, o programa está em /home/ana/python/notas.py, e ela digitou python3 notas.py. O que acontece?
5. Um programa tem 5 linhas, e a linha 4 tem um erro. O que aparece quando a Ana roda o programa?
6. No nano, como você grava o arquivo?
Resumo
- Um programa Python é um arquivo de texto
.py; quem o executa é opython3, como um cozinheiro seguindo uma receita. - Crie uma pasta para os programas (
mkdir python,cd python), escreva com onano(Ctrl+O grava, Ctrl+X sai) e rode compython3 ola.py. - Só o nome do arquivo quer dizer "na pasta atual". Se der
can't open file, leia o caminho na mensagem; entre na pasta certa ou use o caminho (~/python/ola.py). - O Python executa de cima para baixo e para no primeiro erro; as linhas antes dele já rodaram.
- O código de saída (
echo $?) é0quando deu certo e1quando o programa terminou com erro. - Com
#!/usr/bin/env python3na primeira linha echmod +x, o arquivo roda como comando:./ola.py. - Outras formas:
python3 -c '...'(uma linha),python3 -i(roda e fica no>>>) e as caixas Experimente, que rodam omain.pycom um clique. - Próximo passo: conversar com o Python linha por linha, em O Modo Interativo (>>>).