3

在一些 Python 代码中,我fork在子进程中做一些处理,而父进程等待它退出。它没有execfork.

我在 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 测试失败?

4

1 回答 1

1

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

如果子进程期望在退出时进行一些明确的清理,则您必须在测试用例中安排这样做。

于 2011-02-02T22:01:38.320 回答