Respostas:
O que você está procurando no script é chamado sys.exit()
. O argumento para esse método é retornado ao ambiente como o código de saída.
É bem provável que o script nunca chame o método de saída e que 0 seja o código de saída padrão.
A partir da documentação parasys.exit
:
O argumento opcional arg pode ser um número inteiro que fornece o status de saída (padrão de zero) ou outro tipo de objeto. Se for um número inteiro, zero é considerado "terminação bem-sucedida" e qualquer valor diferente de zero é considerado "terminação anormal" por conchas e similares. A maioria dos sistemas exige que ela esteja no intervalo de 0 a 127 e produza resultados indefinidos. Alguns sistemas têm uma convenção para atribuir significados específicos a códigos de saída específicos, mas geralmente são subdesenvolvidos; Os programas Unix geralmente usam 2 para erros de sintaxe da linha de comando e 1 para todos os outros tipos de erros.
Um exemplo em que os códigos de saída são usados estão nos scripts de shell. No bash, você pode verificar a variável especial $?
para o último status de saída:
me@mini:~$ python -c ""; echo $?
0
me@mini:~$ python -c "import sys; sys.exit(0)"; echo $?
0
me@mini:~$ python -c "import sys; sys.exit(43)"; echo $?
43
Pessoalmente, tento usar os códigos de saída que encontro /usr/include/asm-generic/errno.h
(em um sistema Linux), mas não sei se é a coisa certa a fazer.
grep
quebra essa tendência saindo com 1
quando nenhuma linha corresponde e 2
com erros reais. Muito obrigado, Stallman.
Para o registro, você pode usar os códigos de saída padrão POSIX definidos aqui .
Exemplo:
import sys, os
try:
config()
except:
sys.exit(os.EX_CONFIG)
try:
do_stuff()
except:
sys.exit(os.EX_SOFTWARE)
sys.exit(os.EX_OK) # code 0, all ok
exitstatus
pacote PyPI.
Há um errno
módulo que define códigos de saída padrão:
Por exemplo, a permissão negada é o código de erro 13 :
import errno, sys
if can_access_resource():
do_something()
else:
sys.exit(errno.EACCES)
errno
e errno.h ), mas um código de status de saída de 77 (de acordo com os
e sysexits.h ). Os programas que emitem o primeiro não são padrão ( de fato vel jure ) e não funcionam bem com outros que esperam o segundo com razão.
Os códigos de saída 0 geralmente significam "nada de errado aqui". No entanto, se o programador do script não seguir a convenção, talvez seja necessário consultar a fonte para ver o que isso significa. Normalmente, um valor diferente de zero é retornado como um código de erro.
A resposta é "Depende do que o código de saída zero significa"
No entanto, na maioria dos casos, isso significa "Está tudo bem"
Eu gosto do POSIX:
Então, no shell, digitei:
python script.py && echo 'OK' || echo 'Not OK'
Se meu script python chamar, sys.exit(0)
o shell retornará 'OK'
Se meu script python chamar sys.exit(1)
(ou qualquer número inteiro diferente de zero), o shell retornará 'Not OK'
É seu trabalho ficar esperto com o shell e ler a documentação (ou a fonte) do seu script para ver o que significam os códigos de saída.
Os comandos do sistema operacional possuem códigos de saída. Procure códigos de saída do linux para ver algum material sobre isso. O shell usa os códigos de saída para decidir se o programa funcionou, teve problemas ou falhou. Existem alguns esforços para criar códigos de saída padrão (ou pelo menos comumente usados). Veja esta postagem do Advanced Shell Script .
Eu recomendo um desligamento limpo com a saída (0) incorporada em vez de usar sys.exit ()
Não tenho certeza se este é um bom conselho.
A própria documentação mencionada diz:
O módulo do site (importado automaticamente durante a inicialização, exceto se a opção de linha de comando -S for fornecida) adiciona várias constantes ao espaço para nome interno. Eles são úteis para o shell do interpretador interativo e não devem ser usados em programas .
Então:
exit (código = Nenhum)
Objetos que, quando impressos, imprimem uma mensagem como “Use quit () ou Ctrl-D (isto é, EOF) para sair” e, quando chamados, aumentam SystemExit com o código de saída especificado.
Se o compararmos com a documentação sys.exit () , ele está usando o mesmo mecanismo que está gerando uma SystemExit
exceção.
Se você deseja usar portably os códigos de saída POSIX padrão , consulte o exitstatus
pacote no PyPI.
Instale o pacote:
$ pip install exitstatus
Use no seu código:
import sys
from exitstatus import ExitStatus
sys.exit(ExitStatus.success)
Os códigos de saída só têm significado conforme atribuído pelo autor do script. A tradição do Unix é que o código de saída 0 significa 'sucesso', qualquer outra coisa é falha. A única maneira de ter certeza do significado dos códigos de saída para um determinado script é examinar o próprio script.
Seguintes códigos de saída unix 0 - para êxito / OK, 1 - não sucesso / erro. Você pode simplesmente usar exit(0)
ou exit(1)
ligar sem importar o sys
módulo.
Para permitir que manipuladores de exceção e outras coisas sejam executadas, recomendo um encerramento limpo com o exit(0)
built-in, em vez de usar o sys.exit()
que encerra o processo abruptamente.
SystemExit
parece aumentar de qualquer maneira.
os._exit
, os dois parecem aumentar SystemExit
.
sys.exit()
faz desligamento limpa, assim como exit()
. Ambos fazem a mesma coisa: criar uma SystemExit
exceção. Na verdade, exit()
destina-se às sessões interativas, não aos scripts, portanto conceitualmente sys.exit()
é o indicado. Você pode estar confuso os._exit()
, é o que termina abruptamente.