파이썬 os.wait() 함수의 결과를 디코딩하려고 합니다. 파이썬 문서에 따르면 다음과 같이 반환됩니다:
16비트 숫자(낮은 바이트는 프로세스를 종료한 신호 번호, 높은 바이트는 종료 상태(신호 번호가 0인 경우))가 포함된 튜플; 코어 파일이 생성된 경우 낮은 바이트의 높은 비트가 설정됩니다.
종료 상태 표시(정수)를 디코딩하여 높은 바이트와 낮은 바이트를 얻으려면 어떻게 해야 하나요? 구체적으로 다음 코드 스니펫에서 사용되는 디코딩 함수를 어떻게 구현하나요?
(pid,status) = os.wait()
(exitstatus, signum) = decode(status)
일반 질문에 답변해 [약어입니다 조작] 를 사용할 수 있습니다 (http://en.wikipedia.org/wiki/Bit_twiddling) 기술입니다.
pid, status = os.wait()
exitstatus, signum = status & 0xFF, (status & 0xFF00) >> 8
그러나 또한 [기능을 내장한] (http://docs.python.org/lib/os-process.html # l2h-2780) 해석 종료 상태 값:
pid, status = os.wait()
exitstatus, signum = os.WEXITSTATUS( status ), os.WTERMSIG( status )
참고:
Unsigned int 를 얻을 수 있으며, break your 문자열을 바이트입니다 를 구조체입니다 모듈에서는:
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)
이 경우 부부가 함께 어레이입니다 모듈에서는 이 보다 쉽게 할 수 있습니다.
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])
비트 시프팅](http://docs.python.org/ref/shifting.html) 및 마스킹 연산자를 사용하여 상태의 압축을 풀 수 있습니다.
low = status & 0x00FF
high = (status & 0xFF00) >> 8
저는 파이썬 프로그래머가 아니기 때문에 구문이 정확했기를 바랍니다.