문제
Python os.wait() 함수의 결과를 디코딩하려고 합니다.Python 문서에 따르면 이는 다음을 반환합니다.
pid와 종료 상태 표시를 포함하는 튜플:16비트 숫자, 낮은 바이트는 프로세스를 종료한 신호 번호이고 높은 바이트는 종료 상태(신호 번호가 0인 경우)입니다.코어 파일이 생성된 경우 낮은 바이트의 높은 비트가 설정됩니다.
상위 및 하위 바이트를 얻기 위해 종료 상태 표시(정수)를 어떻게 디코딩합니까?구체적으로 말하면 다음 코드 조각에 사용되는 디코드 기능을 어떻게 구현합니까?
(pid,status) = os.wait()
(exitstatus, signum) = decode(status)
해결책
이것은 당신이 원하는 것을 할 것입니다 :
signum = status & 0xff
exitstatus = (status & 0xff00) >> 8
다른 팁
일반적인 질문에 답하려면 다음을 사용하세요. 비트 조작 기법:
pid, status = os.wait()
exitstatus, signum = status & 0xFF, (status & 0xFF00) >> 8
그러나 또한 내장 기능 종료 상태 값을 해석하려면 다음을 수행하세요.
pid, status = os.wait()
exitstatus, signum = os.WEXITSTATUS( status ), os.WTERMSIG( status )
또한보십시오:
- os.WCOREDUMP()
- os.WIF계속()
- os.WIF중지됨()
- os.WIFSIGNALED()
- os.WIFEXITED()
- os.WSTOPSIG()
다음을 사용하여 int를 부호 없는 바이트 문자열로 나눌 수 있습니다. 구조체 기준 치수:
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])
exitstatus, signum= divmod(status, 256)
나보다 앞선 사람들이 성공했지만, 정말로 한 줄로 작성하고 싶다면 다음과 같이 할 수 있습니다.
(signum, exitstatus) = (status & 0xFF, (status >> 8) & 0xFF)
편집하다:거꾸로 했어요.
import amp as amp
import status
signum = status & 0xff
exitstatus = (status & 0xff00) >> 8
제휴하지 않습니다 StackOverflow