I'm mencoba untuk memecahkan kode hasil dari Python os.menunggu() fungsi. Ini kembali, menurut Python docs:
sebuah tuple yang mengandung pid dan keluar indikasi status: 16-bit nomor, dan low byte adalah jumlah sinyal yang menewaskan proses, dan dan byte tinggi adalah status keluar (jika sinyal nomor nol); high bit dari byte rendah diatur jika core file yang dihasilkan.
Bagaimana cara memecahkan kode status keluar indikasi (yang merupakan bilangan bulat) untuk mendapatkan tinggi dan rendah byte? Untuk lebih spesifik, bagaimana cara menerapkan fungsi decode digunakan dalam potongan kode berikut:
(pid,status) = os.wait()
(exitstatus, signum) = decode(status)
Untuk menjawab pertanyaan umum, anda dapat menggunakan manipulasi bit teknik:
pid, status = os.wait()
exitstatus, signum = status & 0xFF, (status & 0xFF00) >> 8
Namun, ada juga fungsi built-in untuk menafsirkan status keluar nilai-nilai:
pid, status = os.wait()
exitstatus, signum = os.WEXITSTATUS( status ), os.WTERMSIG( status )
Lihat juga:
Anda bisa mendapatkan istirahat anda int ke string unsigned byte dengan t modul:
import struct
i = 3235830701 # 0xC0DEDBAD
s = struct.pack(">L", i) # ">" = Big-endian, "<" = Little-endian
print s # '\xc0\xde\xdb\xad'
print s[0] # '\xc0'
print ord(s[0]) # 192 (which is 0xC0)
Jika anda pasangan ini dengan array modul anda dapat melakukan hal ini lebih mudah:
import struct
i = 3235830701 # 0xC0DEDBAD
s = struct.pack(">L", i) # ">" = Big-endian, "<" = Little-endian
import array
a = array.array("B") # B: Unsigned bytes
a.fromstring(s)
print a # array('B', [192, 222, 219, 173])
Anda dapat membongkar status menggunakan bit-pergeseran dan masking operator.
low = status & 0x00FF
high = (status & 0xFF00) >> 8
I'm tidak Python programmer, jadi saya berharap mendapat sintaks yang benar.
Orang-orang sebelum saya've dipaku itu, tetapi jika anda benar-benar menginginkannya pada satu baris, anda dapat melakukan ini:
(signum, exitstatus) = (status & 0xFF, (status >> 8) & 0xFF)
EDIT: Sudah mundur.