Tidak yakin sama sekali. Di Unix / Linux, standarnya adalah: keluar 0 jika semuanya baik-baik saja. Ketikkan perintah, lalu echo $ ?: jika Anda membaca 0, ia kembali tanpa kesalahan. Idenya adalah memiliki tes standar. Jika kode xyz.py tidak menemukan kesalahan, kode tersebut HARUS mengembalikan 0!
Bruno von Paris
1
Jika Anda ingin mengubah kode keluar, lebih memilih untuk keluar dengan bersih menggunakan pintu keluar bawaan, lihat jawaban ini
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:
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.
errno.h biasanya untuk kode keluar panggilan fungsi. Upaya untuk membakukan kode keluar program telah menghasilkan /usr/include/sysexits.h ada di sebagian besar sistem POSIX.
mpounsett
1
Sangat baik untuk mengetahui bahwa "Program Unix umumnya menggunakan 2 untuk kesalahan sintaks baris perintah"!
dantiston
2
@dantiston Concur. Die-hard dicelup-in-the-wool advokat Gentoo, namun saya tidak pernah tahu itu ... sampai hari ini ditakdirkan. ( Malu saya berakhir sekarang. ) Terkait, perhatikan bahwa grepistirahat tren ini dengan keluar dengan 1ketika tidak ada garis yang cocok dan 2pada kesalahan yang sebenarnya. Terima kasih banyak, Stallman.
Cecil Curry
32
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
Ini salah. Kesalahan ini tidak dimaksudkan untuk digunakan sebagai kode proses keluar. Ini adalah kode kesalahan tingkat rendah yang dimaksudkan untuk digunakan secara internal dalam program, khususnya yang ditulis dalam bahasa C. Untuk Python, gunakan pengecualian bila memungkinkan.
SvdB
2
Kamu benar. Ini harus digunakan secara internal. Tetapi Anda biasanya tidak meningkatkan pengecualian di tingkat pengguna akhir. Anda menggunakan sys.exit (x) dengan x menjadi bilangan bulat yang Anda pilih secara sewenang-wenang. Tetapi Anda dapat menggunakan yang dimulai dengan EX_ dan didefinisikan dalam modul 'os'. Seperti os.EX_OK atau os.EX_IOERR
Oli
2
Maaf, tapi saya juga memilih ini karena itu menyesatkan. Keluar dari kode status dan nomor kesalahan tidak dapat dipertukarkan / saling melengkapi. Menggunakan contoh yang diberikan, "izin ditolak" memiliki kode kesalahan 13 (menurut errnodan errno.h ), tetapi kode status keluar dari 77 (menurut osdan 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.
Mark G.
14
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.
Hanya untuk kelengkapan, 'Tidak OK' akan dicetak jika skrip Python menimbulkan kesalahan ATAU memiliki kesalahan sintaks.
Shital Shah
5
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 .
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 SystemExitpengecualian.
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.
Kode keluar dalam banyak bahasa pemrograman bergantung pada pemrogram. Jadi, Anda harus melihat kode sumber program (atau manual) Anda. Nol biasanya berarti "semuanya berjalan baik".
Mengikuti kode keluar unix 0 - untuk sukses / OK, 1 - tidak berhasil / kesalahan. Anda cukup menggunakan exit(0)atau exit(1)menelepon tanpa mengimpor sysmodul.
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.
Jadi apa bedanya? Dari mana informasi ini berasal? Apakah yang Anda maksud adalah eksekusi penangan "saat keluar" atau apa yang sebenarnya Anda maksud? SystemExittampaknya dibesarkan dengan cara baik.
0xC0000022L
mm, saya bingung dengan os._exit, keduanya sepertinya naik SystemExit.
vidstige
1
Salah: sys.exit()tidak mematikan dengan benar, sama seperti exit(). Mereka berdua melakukan hal yang sama : mengajukan SystemExitpengecualian. 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.
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.
sumber
Dari dokumentasi untuk
sys.exit
:Salah satu contoh di mana kode keluar digunakan dalam skrip shell. Dalam bash Anda dapat memeriksa variabel khusus
$?
untuk status keluar terakhir: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.sumber
grep
istirahat tren ini dengan keluar dengan1
ketika tidak ada garis yang cocok dan2
pada kesalahan yang sebenarnya. Terima kasih banyak, Stallman.Sebagai catatan, Anda dapat menggunakan kode keluar standar POSIX yang ditentukan sini .
Contoh:
sumber
exitstatus
paket PyPI.Ada
errno
modul yang mendefinisikan kode keluar standar:Misalnya, Izin ditolak adalah kode kesalahan 13 :
sumber
errno
dan errno.h ), tetapi kode status keluar dari 77 (menurutos
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.
sumber
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.
sumber
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 .
sumber
Saya tidak yakin apakah ini saran yang bagus.
Dokumentasi yang disebutkan itu berbunyi:
Kemudian:
Jika kami membandingkannya dengan dokumentasi sys.exit () , ia menggunakan mekanisme yang sama yang meningkatkan
SystemExit
pengecualian.sumber
Jika Anda ingin portable menggunakan kode keluar POSIX standar , lihat
exitstatus
paket di PyPI.Instal paket:
Gunakan dalam kode Anda:
sumber
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.
sumber
Kode keluar dalam banyak bahasa pemrograman bergantung pada pemrogram. Jadi, Anda harus melihat kode sumber program (atau manual) Anda. Nol biasanya berarti "semuanya berjalan baik".
sumber
Mengikuti kode keluar unix 0 - untuk sukses / OK, 1 - tidak berhasil / kesalahan. Anda cukup menggunakan
exit(0)
atauexit(1)
menelepon tanpa mengimporsys
modul.sumber
Untuk memungkinkan penangan pengecualian dan hal-hal lain dijalankan, saya sarankan shutdown yang bersih dengan
exit(0)
builtin daripada menggunakansys.exit()
yang menghentikan proses secara tiba-tiba.sumber
SystemExit
tampaknya dibesarkan dengan cara baik.os._exit
, keduanya sepertinya naikSystemExit
.sys.exit()
tidak mematikan dengan benar, sama sepertiexit()
. Mereka berdua melakukan hal yang sama : mengajukanSystemExit
pengecualian. Sebenarnya,exit()
dimaksudkan untuk sesi interaktif, bukan skrip, jadi secara konseptualsys.exit()
adalah yang ditunjukkan. Anda mungkin bingung denganos._exit()
, itu yang berakhir dengan tiba-tiba.