2016-08-18 81 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(),而不是查找和讀取。

相關問題