hoje, vamos mergulhar no tópico de sair/terminar scripts Python! Antes de começarmos, você deve ter uma compreensão básica do que é o Python e algum conhecimento básico sobre o seu uso.
Você pode usar o IDE de sua escolha, mas eu vou usar o subsistema Linux da Microsoft para o pacote Windows (WSL) desta vez. Para mais informações sobre isso e como você ativá-lo no Windows 10, vá aqui.
tabela de conteúdos
porque é que o Python sai automaticamente de um programa quando está terminado?,
a forma como o Python executa um bloco de código faz com que execute cada linha em ordem, verificando dependências para importar, ler definições e classes para armazenar na memória, e executando pedaços de código, a fim de permitir loops e chamadas de volta para as definições e classes definidas.
Quando o interpretador Python chega ao fim do arquivo (EOF), ele percebe que não pode ler mais dados da fonte, seja essa a entrada do Usuário através de um IDE ou leitura de um arquivo. Para demonstrar, vamos tentar obter a entrada do Usuário e interromper o interpretador no meio da execução!,
primeiro, a partir do seu terminal bash no seu PowerShell, abra um novo ficheiro chamado “input.,n colar o seguinte para o shell clicando com o botão direito na janela do PowerShell
name=input("Don"t type anything!\n")print("Hi,",name,"!")
Agora, pressione CTRL+X
para salvar e sair do nano janela e no shell, digite:
$ python3 input.pyDon"t type anything!
E pressione CTRL+D
para encerrar o programa enquanto ele está aguardando entrada do usuário
Traceback (most recent call last):File "input.py", line 1, in name=input("Don"t type anything!")EOFError
EOFError
exceção nos diz que o interpretador Python atingido o fim do ficheiro (EOF) condição antes de terminar a execução do código, como o usuário inseriu nenhuma entrada de dados.,
Quando o Python atinge a condição de EOF ao mesmo tempo que executou todo o código sem lançar quaisquer exceções, que é uma maneira que o Python pode sair “graciosamente.”
Detect script exit
If we want to tell when a Python program outs without throwing an exception, we can use the built-in Python atexit
module.
o atexit
lida com qualquer coisa que queremos que o programa faça quando ele sair e é normalmente usado para fazer a limpeza do programa antes que o processo do programa termine
para experimentar com atexit, vamos modificar a nossa entrada.,py exemplo para imprimir uma mensagem na saída do programa. Abra o input.py arquivo novamente e substituir texto
import atexitatexit.register(print,"Program exited successfully!")name=input("What"s your name?\n")print("Hi,",name,"!")
Digite seu nome, e quando você pressionar enter, você deve obter:
What"s your name?ExampleHi, Example !Program exited successfully!
Repare como a saída de texto aparece no final da saída, não importa onde estamos colocar o atexit
chamada, e como se substituir o atexit
chamadas com um simples print()
, temos a saída de texto onde o print()
tudo foi feito, em vez de para onde o código sai.,
Program exited successfully!What"s your name?ExampleHi, Example !
saída normal
Existem várias maneiras para sair de um Programa Python que não envolva a lançar uma exceção; o primeiro ia tentar é quit()
Você pode usar o comando bash echo $?
para obter o código de saída do interpretador Python.,
também é possível definir o tipo de código que o intérprete deve sair com a entrega de quit()
argumento um número inteiro menor que 256
exit()
tem a mesma funcionalidade que é um alias para o quit()
Nem quit()
nem exit()
são consideradas boas práticas, na medida em que ambas requerem o site
módulo, que está destinado para ser usado para interativos intérpretes e não nos programas., Para um de nossos programas, devemos usar algo como sys.exit
Repare que precisamos importar explicitamente um módulo para chamada de exit()
, isto pode parecer não é uma melhoria, mas garante que o módulo é carregado, porque não é uma boa suposição site
vai ser carregados em tempo de execução., Se não deseja importar os módulos extra, nós pode fazer o que exit()
quit()
e sys.exit()
estão fazendo nos bastidores e raise SystemExit
Sair com mensagens de erro
o Que, se ficar ruim de entrada de um usuário?, Vamos olhar para trás em nossas input.py
script e adicionar a capacidade de lidar com más entrada do usuário (CTRL+D
para passar um caractere EOF)
try
instrução diz ao Python para tentar o código dentro a instrução e para passar qualquer exceção para o except
instrução antes de sair.
sair sem erro
e se o utilizador entregar o seu programa um erro, mas não quer que o seu código imprima um erro, ou que faça algum tipo de manipulação de erros para minimizar o impacto do utilizador?,
Nós podemos adicionar um finally
instrução, o que nos permite executar código depois de fazer o nosso tratamento de erros em catch
Observe que o usuário nunca sabe de uma EOFError
ocorreu, isto pode ser usado para passar valores padrão em caso de má entrada ou argumentos.,
Exit and release your resources
geralmente, Python libera todos os recursos que você chamou em seu programa automaticamente quando ele sai, mas para certos processos, é boa prática codificar alguns recursos limitados em um bloco with
.
muitas vezes você vai ver isso emopen()
chamadas, onde não liberar corretamente o arquivo pode causar problemas com a leitura ou escrita para o arquivo mais tarde.
with
bloquear automaticamente libera todos os recursos requisitados dentro dele., Se queríamos mais explicitamente garantir que o arquivo foi fechado, podemos usar a tag atexit.register()
comando para chamar close()
$ nano openfile.pyimport atexitfile=open("testfile.txt","w")file.write("let"s write some text!\n")atexit.register(file.close)
Se os recursos são chamadas sem utilizar um with
bloco, certifique-se explicitamente liberá-los em um atexit
comando.
Sair depois de um tempo
Se estamos preocupados com o nosso programa pode nunca terminar normalmente, em seguida, nós podemos utilizar Python multiprocessing
módulo para garantir que o nosso programa vai terminar.,
Repare como o processo não foi concluída quando a função foi dito para aguardar 7 segundos, mas concluído e impresso o que era suposto, quando foi dito para esperar 0 segundos!
Sair usando uma instrução return
Se nós temos uma seção de código que deseja usar para encerrar o programa inteiro, em vez de deixar o break
declaração de continuar código fora do loop, podemos usar o return sys.exit()
para sair do código completamente.,
Sair no meio de uma função
Se a gente não quiser usar uma instrução de retorno, ainda podemos chamar o sys.exit()
para fechar o nosso programa e fornecer um return
em outro ramo. Vamos usar o nosso código de break.py outra vez.
Sair quando as condições forem atendidas
Se a gente tem um ciclo em nossa código Python e nós queremos ter certeza de que o código pode sair se depara com um problema, podemos usar um sinalizador de que ele possa verificar para encerrar o programa.,
Exit on keypress
If we want to hold our program open in the console till we press a key, we can use an unboundinput()
to close it.
$ nano holdopen.pyinput("Press enter to continue")$ python3 holdopen.pyPress enter to continue$
também podemos passarCTRL+C
para a consola para dar a Python a carácter. Nós podemos até mesmo lidar com a exceção
como já lidamos com exceções antes.,
Sair de um programa multithread
Saindo um programa multithread é um pouco mais envolvido, como um simples sys.exit()
é chamado de thread que só vai sair o thread actual., O “sujo” maneira de fazer isso é usar os._exit()
Como você pode ver, o programa não imprime o resto do programa antes de sair, é por isso que os._exit()
normalmente é reservado para um último recurso, e chamando qualquer um Thread.join()
a partir do thread principal é o método preferencial para terminar um programa multithread.,
Final sem sys sair
Sys.exit()
é apenas uma das várias maneiras pelas quais podemos sair dos nossos programas Python, o que sys.exit()
não é raise SystemExit
então, nós podemos facilmente utilizar qualquer built-in Python exceção ou criar um dos nossos!
também podemos usar o os._exit()
para informar ao host do sistema para matar o python processo, apesar de isso não fazer atexit
limpeza.,
Sair após exceção
Se queremos sair em qualquer excepção e sem qualquer tratamento, podemos usar o nosso try-except
bloco para executar os._exit()
.
Exit and restart
finalmente, vamos explorar o que fazemos para sair do Python e reiniciar o programa, o que é útil em muitos casos.
espero que ache o tutorial útil. Continua a voltar.obrigado.,
Fundador da LikeGeeks. Trabalho como administrador de sistemas Linux desde 2010. Sou responsável pela manutenção, segurança e resolução de problemas de Servidores Linux para vários clientes em todo o mundo. Adoro escrever scripts shell e Python para automatizar o meu trabalho.