นี่คือรหัสของฉัน:
import unittest
import sys
import os
class DemoTest(unittest.TestCase):
def test_one(self):
print "test one"
self.assertTrue(True)
def test_two(self):
print "test two"
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)
เมื่อฉันรันสิ่งนี้ เนื้อหาของ demo_test.stdout.log
จะเป็นเพียง:
test one
test two
บนหน้าจอฉันยังคงเห็นผลลัพธ์จาก unittest:
======================================================================
FAIL: test_two (__main__.DemoTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "demotest.py", line 12, in test_two
self.assertTrue(False)
AssertionError: False is not true
----------------------------------------------------------------------
Ran 2 tests in 0.000s
FAILED (failures=1)
ฉันต้องการให้ไม่มีเอาต์พุตบนหน้าจอและทุกอย่างที่จะบันทึก (ฉันกำลังรันการทดสอบเป็นงาน cron ดังนั้นเอาต์พุตใดๆ ที่ส่งไปยัง stdout หรือ stderr จะทำให้มีการส่งอีเมล ดังนั้นฉันจึงต้องการระบุได้อย่างแน่ชัดว่าสิ่งนี้จะเกิดขึ้นเมื่อใด ซึ่งหมายความว่าฉันต้องสามารถควบคุม unittest ในสิ่งนี้ได้ คำนึงถึง.)
sys.__stdout__
และsys.__stderr__
ก็ล้มเหลวที่นี่ - ฉันคิดว่ามันเป็นไปไม่ได้ที่จะเปลี่ยนเส้นทางเอาต์พุตจากภายใน python เอง - person Eric   schedule 10.01.2013