Python Popen stdin.close + wait()在unittest

时间:2019-01-08 11:53:15

标签: python subprocess

我有一个从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__)

谢谢!

1 个答案:

答案 0 :(得分:0)

我相信警告可能涉及子流程的stdout / stderr,尤其是如果您正在使用subprocess.PIPE的话。

我自己也遇到了同样的问题,在等待返回后向proc.stdout.close()proc.stderr.close()添加了呼叫后,问题消失了。