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