2016-08-18 55 views
1

我正在使用call_command在管理命令中运行django-nose测试。我需要捕获输出并对其进行处理,具体取决于输出是否失败或通过。 我当前的代码管理命令:Django鼻子 - 在运行测试时需要捕获输出

content = StringIO() 
try: 
    call_command('test', '--nologcapture', '-s', stdout=content) 
     # since its calling system exit 
except BaseException: 
    pass 
content.seek(0) 
print content.read(), '<-- content' 

# Check if test is passed and do something or else something else. 

在我的情况下,内容始终是一个空字符串。

我尝试了很多鼻子插件,但无法获取输出。

谢谢。

回答

0

问题的可能原因是在管理代码中,他们正在使用直接打印到sys.stdout的打印语句,而不是使用管理命令实例的self.stdout属性。

检查管理命令中的代码。这些脚印应该是这个样子:

self.stdout.write(...) 
# or, perhaps ... 
print(..., file=self.stdout) 

如果不是这种情况下,你必须在管理命令的代码控制,那么修复起来使用self.stdout。然后你应该看到你的当前代码在你的StringIO实例中捕获的输出。

如果您无法控制管理命令中的代码,那么在调用命令之前,您必须通过重定向stdout(使用上下文管理器)以另一种方式进行操作。

注意:从StringIO实例检索输出的简单方法是使用content.getvalue(),而不是查找和读取。

相关问题