我有一个从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:ResourceWarning:未关闭 文件<_io.TextIOWrapper名称= 5编码='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__)
谢谢!
答案 0 :(得分:0)
我相信警告可能涉及子流程的stdout / stderr,尤其是如果您正在使用subprocess.PIPE的话。
我自己也遇到了同样的问题,在等待返回后向proc.stdout.close()
和proc.stderr.close()
添加了呼叫后,问题消失了。