Jawaban:
Apa yang Anda cari dalam skrip adalah panggilan untuk sys.exit()
. Argumen untuk metode itu dikembalikan ke lingkungan sebagai kode keluar.
Kemungkinan besar script tidak pernah memanggil metode keluar, dan 0 adalah kode keluar default.
Dari dokumentasi untuksys.exit
:
Argumen argumen opsional dapat berupa bilangan bulat yang memberikan status keluar (default ke nol), atau jenis objek lainnya. Jika bilangan bulat, nol dianggap sebagai "penghentian sukses" dan nilai bukan nol dianggap "penghentian abnormal" oleh kerang dan sejenisnya. Sebagian besar sistem mengharuskannya berada dalam kisaran 0-127, dan menghasilkan hasil yang tidak ditentukan. Beberapa sistem memiliki konvensi untuk menetapkan makna khusus untuk kode keluar tertentu, tetapi ini umumnya kurang berkembang; Program Unix umumnya menggunakan 2 untuk kesalahan sintaks baris perintah dan 1 untuk semua jenis kesalahan lainnya.
Salah satu contoh di mana kode keluar digunakan dalam skrip shell. Dalam bash Anda dapat memeriksa variabel khusus $?
untuk status keluar terakhir:
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
Secara pribadi saya mencoba menggunakan kode keluar yang saya temukan /usr/include/asm-generic/errno.h
(pada sistem Linux), tetapi saya tidak tahu apakah ini hal yang benar untuk dilakukan.
grep
istirahat tren ini dengan keluar dengan 1
ketika tidak ada garis yang cocok dan 2
pada kesalahan yang sebenarnya. Terima kasih banyak, Stallman.
Sebagai catatan, Anda dapat menggunakan kode keluar standar POSIX yang ditentukan sini .
Contoh:
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
paket PyPI.
Ada errno
modul yang mendefinisikan kode keluar standar:
Misalnya, Izin ditolak adalah kode kesalahan 13 :
import errno, sys
if can_access_resource():
do_something()
else:
sys.exit(errno.EACCES)
errno
dan errno.h ), tetapi kode status keluar dari 77 (menurut os
dan sysexits.h ). Program yang memancarkan yang pertama adalah non-standar ( de facto vel jure ) dan tidak akan bermain dengan baik dengan orang lain yang benar mengharapkan yang terakhir.
Kode keluar 0 biasanya berarti, "tidak ada yang salah di sini." Namun, jika pemrogram naskah tidak mengikuti konvensi, Anda mungkin harus berkonsultasi dengan sumbernya untuk mengetahui artinya. Biasanya nilai yang bukan nol dikembalikan sebagai kode kesalahan.
Jawabannya adalah "Tergantung pada apa artinya kode keluar nol"
Namun, dalam kebanyakan kasus, ini berarti "Semuanya baik-baik saja"
Saya suka POSIX:
Jadi, pada shell, saya akan mengetik:
python script.py && echo 'OK' || echo 'Not OK'
Jika skrip python saya memanggil sys.exit(0)
shell mengembalikan 'OK'
Jika skrip python saya memanggil sys.exit(1)
(atau bilangan bulat bukan nol), shell mengembalikan 'Not OK'
Tugas Anda untuk menjadi pintar dengan shell, dan membaca dokumentasi (atau sumber) untuk skrip Anda untuk melihat apa arti kode keluar.
Perintah sistem operasi memiliki kode keluar. Cari kode keluar linux untuk melihat beberapa materi tentang ini. Shell menggunakan kode keluar untuk memutuskan apakah program bekerja, ada masalah, atau gagal. Ada beberapa upaya untuk membuat kode keluar standar (atau setidaknya yang umum digunakan). Lihat posting Advanced Shell Script ini .
Saya merekomendasikan shutdown bersih dengan jalan keluar (0) builtin daripada menggunakan sys.exit ()
Saya tidak yakin apakah ini saran yang bagus.
Dokumentasi yang disebutkan itu berbunyi:
Modul situs (yang diimpor secara otomatis selama startup, kecuali jika opsi -S command-line diberikan) menambahkan beberapa konstanta ke namespace built-in. Mereka berguna untuk shell interpreter interaktif dan tidak boleh digunakan dalam program .
Kemudian:
keluar (kode = Tidak Ada)
Objek yang ketika dicetak, mencetak pesan seperti "Gunakan berhenti () atau Ctrl-D (yaitu EOF) untuk keluar", dan ketika dipanggil, naikkan SystemExit dengan kode keluar yang ditentukan.
Jika kami membandingkannya dengan dokumentasi sys.exit () , ia menggunakan mekanisme yang sama yang meningkatkan SystemExit
pengecualian.
Jika Anda ingin portable menggunakan kode keluar POSIX standar , lihatexitstatus
paket di PyPI.
Instal paket:
$ pip install exitstatus
Gunakan dalam kode Anda:
import sys
from exitstatus import ExitStatus
sys.exit(ExitStatus.success)
Kode keluar hanya memiliki makna sebagaimana ditugaskan oleh penulis skrip. Tradisi Unix adalah bahwa kode keluar 0 berarti 'sukses', yang lain adalah kegagalan. Satu-satunya cara untuk memastikan apa arti kode keluar untuk skrip yang diberikan adalah dengan memeriksa skrip itu sendiri.
Mengikuti kode keluar unix 0 - untuk sukses / OK, 1 - tidak berhasil / kesalahan. Anda cukup menggunakan exit(0)
atau exit(1)
menelepon tanpa mengimpor sys
modul.
Untuk memungkinkan penangan pengecualian dan hal-hal lain dijalankan, saya sarankan shutdown yang bersih dengan exit(0)
builtin daripada menggunakan sys.exit()
yang menghentikan proses secara tiba-tiba.
SystemExit
tampaknya dibesarkan dengan cara baik.
os._exit
, keduanya sepertinya naik SystemExit
.
sys.exit()
tidak mematikan dengan benar, sama seperti exit()
. Mereka berdua melakukan hal yang sama : mengajukan SystemExit
pengecualian. Sebenarnya, exit()
dimaksudkan untuk sesi interaktif, bukan skrip, jadi secara konseptual sys.exit()
adalah yang ditunjukkan. Anda mungkin bingung dengan os._exit()
, itu yang berakhir dengan tiba-tiba.