Question

Dans certains codes Python, je génère un code codique et j'effectue un traitement dans un processus enfant pendant que le parent attend qu'il se termine.Il ne génère pas de code-code après le code-code générique.

J'ai un problème pour tester ce code dans PyUnit, car lorsque le processus enfant se termine explicitement avec fork, il crée une erreur PyUnit.

Ce code ci-dessous produit le problème

class TestClass(TestCase):
    def test(self):
        pid = os.fork()
        if pid == 0:
            sys.exit(0)
        else:
            os.waitpid(pid,0)

C'est l'erreur

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)

Y a-t-il un moyen d'éviter que PyUnit échoue au test si un processus enfant se ferme explicitement?

Était-ce utile?

La solution

Tout ce que sys.exit fait est de lancer une exception SystemExit, qui bouillonne normalement.Cependant os._exit (0) se fermera immédiatement et ne donnera à aucun code de nettoyage une chance de s'exécuter.Cela empêche PyUnit de faire quoi que ce soit, y compris l'échec du test.Ainsi, dans votre code de test, vous pouvez intercepter SystemExit et appeler os._exit à la place.

Si le processus enfant s'attend à ce qu'un nettoyage explicite se produise à la sortie, vous devrez vous organiser pour le faire dans votre cas de test.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top