3

一部のPythonコードではfork、親が終了するのを待つ間、子プロセスで処理を実行します。exec後ではありませんfork

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がテストに失敗するのを回避する方法はありますか?

4

1 に答える 1

1

sys.exitが行うのは、SystemExit例外をスローすることだけです。これは、通常どおりに発生します。ただし、os._exit(0)はすぐに終了し、クリーンアップコードを実行する機会を与えません。これにより、PyUnitは、テストの失敗を含め、何もできなくなります。したがって、テストコードでは、SystemExitをトラップして、代わりにos._exitを呼び出すことができます。

子プロセスが終了時に明示的なクリーンアップが行われることを期待している場合は、テストケースでそれを行うように調整する必要があります。

于 2011-02-02T22:01:38.320 に答える