У меня есть класс Python, который наследуется от Popen:
class S(Popen):
def exit(self):
self.stdin.close()
return self.wait()
Это работает нормально, за исключением того, что если я вызову метод exit()
в моем модульном тесте Python (используя встроенную инфраструктуру 'unittest'), при запуске теста возникает следующая ошибка:
/ usr / lib / python3.5 / unittest / case.py: 600: Предупреждение о ресурсе: не закрыто
file <_io.TextIOWrapper name = 5 encoding = 'UTF-8'> testMethod ()
Вот код теста:
class TestS(unittest.TestCase):
def test_exit(self):
s = S()
self.assertTrue(s.exit() == 0)
Я знаю, что это вызвано строкой return self.wait()
, потому что другие файлы не открываются, и если его заменить на return 0
, предупреждение исчезнет.
Есть ли что-то еще, что нужно сделать для правильной очистки? Возможно, что-то эквивалентное pclose()
в C? Нашел похожий вопрос полезным, но это не помогло решить эту проблему. Тест пройден, но я бы предпочел не подавлять предупреждение, не понимая причину.
Некоторые вещи, которые я уже попробовал, но безуспешно:
- Блок
with S() as s
- То же, что и выше, с
self.exit()
, вызываемым деструктором (def __exit__)
Заранее спасибо!