PyUnit与子进程

时间:2011-02-02 21:05:52

标签: python python-unittest child-process

在某些Python代码中,我fork并在子进程中进行一些处理,而父进程等待它退出。它不会exec之后的fork

我在PyUnit中测试此代码时遇到问题,因为当子进程使用sys.exit显式退出时,会产生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 个答案:

答案 0 :(得分:1)

sys.exit所做的就是抛出一个SystemExit异常,它会像往常一样冒泡。但是,os._exit(0)将立即退出,并且不会给任何清理代码提供运行的机会。这可以防止PyUnit做任何事情,包括测试失败。因此,在您的测试代码中,您可以捕获SystemExit并调用os._exit。

如果子进程希望在退出时进行一些显式清理,则必须安排在测试用例中执行此操作。