【发布时间】:2019-01-08 11:53:14
【问题描述】:
我有一个继承自 Popen 的 Python 类:
class S(Popen):
def exit(self):
self.stdin.close()
return self.wait()
这工作正常,除了如果我在我的 Python 单元测试中调用 exit() 方法(使用内置的 'unittest' 框架),运行测试时会出现以下错误:
/usr/lib/python3.5/unittest/case.py:600:资源警告:未关闭 文件 <_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 替换,警告就会消失。
是否需要做其他事情才能进行适当的清理?也许相当于 C 语言中的pclose()?发现一个类似的 question 有帮助,但它并不能真正帮助解决这个问题。测试通过了,但我宁愿不压制警告,不了解原因。
我已经尝试过一些事情,但没有成功:
- 做了
with S() as s块 - 与上面相同,
self.exit()被析构函数调用 (def __exit__)
提前致谢!
【问题讨论】:
标签: python subprocess