Skip to main content
 首页 » 编程设计

python之带有子进程的 PyUnit

2025年05月04日9wayfarer

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

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

请您参考如下方法:

sys.exit 所做的只是抛出一个 SystemExit 异常,它会像往常一样冒泡。然而 os._exit(0) 将立即退出并且不给任何清理代码运行的机会。这会阻止 PyUnit 执行任何操作,包括使测试失败。因此,在您的测试代码中,您可以捕获 SystemExit 并改为调用 os._exit。

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