2011-02-02 4 views
2

일부 Python 코드에서 I fork과 부모 프로세스가 종료 될 때까지 기다리는 동안 자식 프로세스에서 일부 처리를 수행합니다. fork 뒤에는 exec이 표시되지 않습니다.자식 프로세스가있는 PyUnit

자식 프로세스가 sys.exit으로 명시 적으로 종료 될 때 PyUnit 오류가 발생하므로 PyUnit에서이 코드를 테스트하는 데 문제가 있습니다.

이 코드는 아래의 문제를 발생

class TestClass(TestCase): 
    def test(self): 
     pid = os.fork() 
     if pid == 0: 
      sys.exit(0) 
     else: 
      os.waitpid(pid,0) 

이 오류

Traceback (most recent call last): 
    File "test.py", line 15, in test 
    sys.exit(0) 
SystemExit: 0 
---------------------------------------------------------------------- 
Ran 1 test in 0.007s 

FAILED (errors=1) 

가 자식 프로세스가 명시 적으로 종료하는 경우 PyUnit 테스트를 실패 피하기 위해 어떤 방법이 있나요입니까?

답변

1

sys.exit가 수행하는 모든 작업은 SystemExit 예외를 throw하므로 정상적으로 버블됩니다. 그러나 os._exit (0)은 즉시 종료되며 정리 코드에 실행 기회가 제공되지 않습니다. 이렇게하면 PyUnit이 테스트 실패를 포함하여 아무 것도하지 않게됩니다. 따라서 테스트 코드에서 SystemExit을 트랩하고 대신 os._exit를 호출 할 수 있습니다.

자식 프로세스가 종료 할 때 명백한 정리가 발생할 것으로 예상되는 경우 테스트 케이스에서이를 수행해야합니다.

관련 문제