title: How can I redirect the output of unittest? Obvious solution doesn't work
body: <p>Here is my code:</p>
  <pre><code>import unittest
  import sys
  import os
  
  class DemoTest(unittest.TestCase):
      def test_one(self):
          print &quot;test one&quot;
          self.assertTrue(True)
  
      def test_two(self):
          print &quot;test two&quot;
          self.assertTrue(False)
  
  if __name__ == '__main__':
      dirpath = os.path.dirname(os.path.abspath(__file__))
      sys.stdout = open(dirpath+'/test_logs/demo_test.stdout.log', 'w')
      sys.stderr = open(dirpath+'/test_logs/demo_test.stderr.log', 'w')
      test_program = unittest.main(verbosity=0, exit=False)
  </code></pre>
  <p>When I run this, the contents of <code>demo_test.stdout.log</code> is only:</p>
  <pre><code>test one
  test two
  </code></pre>
  <p>on the screen I still see the output from unittest:</p>
  <pre><code>======================================================================
  FAIL: test_two (__main__.DemoTest)
  ----------------------------------------------------------------------
  Traceback (most recent call last):
    File &quot;demotest.py&quot;, line 12, in test_two
      self.assertTrue(False)
  AssertionError: False is not true
  
  ----------------------------------------------------------------------
  Ran 2 tests in 0.000s
  
  FAILED (failures=1)
  </code></pre>
  <p>I want there to be no output on the screen and everything to be logged. (I am running the test as a cron job, so any output to stdout or stderr causes an email to be sent, so I want to be able to specify exactly when this happens, which means I need to be able to control unittest in this regard.)</p>