Yanıtlar:
Senaryoda aradığınız şey çağrıdır sys.exit()
. Bu yöntemin bağımsız değişkeni, çıkış kodu olarak ortama döndürülür.
Komut dosyasının hiçbir zaman çıkış yöntemini çağırmaması oldukça olasıdır ve 0 varsayılan çıkış kodudur.
İçin belgelerdensys.exit
:
İsteğe bağlı argüman, çıkış durumunu (varsayılan olarak sıfıra) veren bir tam sayı veya başka bir nesne türü olabilir. Bir tamsayı ise, sıfır “başarılı sonlandırma” olarak kabul edilir ve sıfır olmayan herhangi bir değer, kabuklar ve benzerleri tarafından “anormal sonlandırma” olarak kabul edilir. Çoğu sistem 0-127 aralığında olmasını ve aksi halde tanımlanmamış sonuçlar üretmesini gerektirir. Bazı sistemler, belirli çıkış kodlarına belirli anlamlar atamak için bir kurala sahiptir, ancak bunlar genellikle az gelişmiştir; Unix programları genellikle komut satırı sözdizimi hataları için 2 ve diğer tüm hata türleri için 1 kullanır.
Çıkış kodlarının kullanıldığı bir örnek kabuk komut dosyalarındadır. Bash'da $?
son çıkış durumu için özel değişkeni kontrol edebilirsiniz :
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
Şahsen bulduğum çıkış kodlarını /usr/include/asm-generic/errno.h
(bir Linux sisteminde) kullanmaya çalışıyorum, ama bunun doğru bir şey olup olmadığını bilmiyorum.
grep
çıkarak bu eğilimi kırdığını unutmayın . Çok teşekkürler Stallman. 1
2
Kayıt için, burada tanımlanan POSIX standart çıkış kodlarını kullanabilirsiniz .
Misal:
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
PyPI paketine bakın.
errno
Standart çıkış kodlarını tanımlayan bir modül vardır:
Örneğin, İzin reddedildi hata kodu 13 :
import errno, sys
if can_access_resource():
do_something()
else:
sys.exit(errno.EACCES)
errno
ve errno.h'ye göre ), ancak çıkış durum kodu 77 ( os
ve sysexits.h'ye göre ) içerir. Birinciyi yayan programlar standart değildir ( fiili vel jure ) ve ikincisini haklı olarak bekleyen başkalarıyla iyi oynamazlar.
0 çıkış kodları genellikle "burada yanlış bir şey yok" anlamına gelir. Ancak komut dosyasının programcısı konvansiyonu takip etmediyse, ne anlama geldiğini görmek için kaynağa danışmanız gerekebilir. Genellikle sıfır olmayan bir değer hata kodu olarak döndürülür.
Cevap "Sıfır çıkış kodunun ne anlama geldiğine bağlıdır"
Ancak, çoğu durumda, bu "Her şey yolunda" anlamına gelir
POSIX'i seviyorum:
Yani, kabuğa şunu yazardım:
python script.py && echo 'OK' || echo 'Not OK'
Python betiğim çağrılırsa sys.exit(0)
kabuk 'Tamam'ı döndürür
Python betiğim çağırırsa sys.exit(1)
(veya sıfırdan farklı bir tam sayı), kabuk 'Tamam değil' değerini döndürür
Kabuk ile akıllıca davranmak ve çıkış kodlarının ne anlama geldiğini görmek için komut dosyanızın belgelerini (veya kaynağını) okumak sizin işiniz.
İşletim sistemi komutlarında çıkış kodları bulunur. Bununla ilgili bazı materyalleri görmek için linux çıkış kodlarına bakın. Kabuk, programın çalışıp çalışmadığını, sorun yaşadığını veya başarısız olup olmadığını belirlemek için çıkış kodlarını kullanır. Standart (veya en azından yaygın olarak kullanılan) çıkış kodları oluşturmak için bazı çabalar vardır. Bu Gelişmiş Kabuk Betiği yayınına bakın.
Sys.exit () kullanmak yerine exit (0) yerleşik ile temiz bir kapatma öneririm
Bunun iyi bir tavsiye olup olmadığından emin değilim.
Site modülü (başlangıç sırasında -S komut satırı seçeneği belirtilmedikçe otomatik olarak içe aktarılır) yerleşik ad alanına birkaç sabit ekler. İnteraktif tercüman kabuğu için kullanışlıdır ve programlarda kullanılmamalıdır .
Sonra:
çıkış (kod = Yok)
Basıldığında, “Çıkmak için quit () veya Ctrl-D (yani EOF) kullan” gibi bir mesaj yazdıran ve çağrıldığında SystemExit'i belirtilen çıkış koduyla yükselten nesneler.
Bunu sys.exit () belgeleriyle karşılaştırırsak, bir SystemExit
istisna yaratan aynı mekanizmayı kullanır .
Standart POSIX çıkış kodlarını taşınabilir bir şekilde kullanmak isterseniz exitstatus
, PyPI üzerindeki pakete bakın .
Paketi yükleyin:
$ pip install exitstatus
Kodunuzda kullanın:
import sys
from exitstatus import ExitStatus
sys.exit(ExitStatus.success)
Çıkış kodları yalnızca kod yazarı tarafından atanan anlama gelir. Unix geleneği, çıkış kodu 0'ın 'başarı' anlamına geldiği, her şeyin başarısız olduğu anlamına gelir. Belirli bir komut dosyasının çıkış kodlarının ne anlama geldiğinden emin olmanın tek yolu komut dosyasının kendisini incelemektir.
İstisna işleyicilerinin ve diğer şeylerin yürütülmesine izin vermek için , işlemi aniden sonlandıran exit(0)
yerine yerleşik ile temiz bir kapatma öneririm sys.exit()
.
SystemExit
her iki şekilde de kalkıyor gibi görünüyor.
os._exit
, ikisi de yükseliyor gibi görünüyor SystemExit
.
sys.exit()
muexit()
? İkisi de aynı şeyi yapıyor: bir SystemExit
istisna ortaya koyuyor. Aslında, exit()
komut dosyaları için değil, etkileşimli oturumlar içindir, bu nedenle kavramsal sys.exit()
olarak belirtilir. Kafa karıştırıyor olabilirsiniz os._exit()
, aniden sona eren budur.