【问题标题】:Python Popen stdin.close + wait() generates ResourceWarning in unittestPython Popen stdin.close + wait() 在单元测试中生成 ResourceWarning
【发布时间】: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


    【解决方案1】:

    我相信警告可能涉及子进程的标准输出/标准错误,特别是如果您对其中任何一个使用 subprocess.PIPE。

    我自己也遇到了同样的问题,在等待返回后添加对 proc.stdout.close()proc.stderr.close() 的调用后它就消失了。

    【讨论】:

      猜你喜欢
      • 2018-06-18
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      相关资源
      最近更新 更多