我有一个运行多个测试文件的GUI。 所有测试都是python文件,GUI使用从线程运行的子进程逐个运行。
在GUI中,用户可以停止运行测试的计算机。 我已经找到了如何为此目的杀死子进程及其工作原理。 见Killing sub process that run inside a thread
现在,我有另一个问题。 测试打开了许多我必须以有序的方式关闭的实例。 当我使用 kill()方法时,所有实例都没有关闭,我无法运行进一步的测试。 I.E在用户停止之前我在测试中使用的COM端口仍然被占用并阻止我再运行测试。
唯一的解决方法是关闭GUI并重新开始。
简而言之,我需要一种方法来随时杀死一个子进程,但仍然关闭所有实例,如 sys.exit(),或者关闭GUI所具有的效果。 我尝试使用等待(超时),但除非我错误地使用它,否则它无法解决问题。
我可以在测试中使用一种中断来调用某个方法,这会以有序的方式关闭它吗?
答案 0 :(得分:0)
您应该能够使用类似this solution的内容来识别和终止应用程序启动的子进程以运行测试。此解决方案似乎特别适合您杀死所有后台进程的用例,以便您的应用程序能够运行更多测试。
或者,您可以为测试创建一个try-except
包装器或装饰器,允许它们在应用程序发送某个信号时被杀死,但这需要应用程序跟踪所有启动子进程,如果测试在后台启动其他子进程,则可能无法正确终止所有进程。