2011-06-10 69 views
1

在我的一個功能中,我打電話給一個外部程序,使用subprocess.check_call,這將產生輸出。我怎麼能使用doctest來確保它生成的輸出是我期望的輸出?如何使用doctest檢查程序是否產生了某些輸出?

+0

什麼期望輸出? – mouad 2011-06-10 08:33:44

+0

例如:「正在處理文件...」,並且每次處理新文件時都會顯示它。我有一組固定的文件,所以我知道該消息應該出現多少次。 – Geo 2011-06-10 08:54:15

回答

1

也許這可以幫助:

import sys 
import tempfile 
import subprocess 


def example(output): 
    r""" Do something ... 

    >>> output = example('Processing file ...') 
    >>> print output # doctest:+ELLIPSIS 
    'Processing file ...' 

    Check how many file was processed. 
    >>> [line.startswith('Processing file') 
    ... for line in output.splitlines()].count(True) 
    1  

    """ 
    cmd = "print '%s'" % (output,) 
    with tempfile.TemporaryFile() as output: 
     subprocess.check_call([sys.executable, '-c', cmd], stdout=output) 
     output.seek(0) 
     res = output.read() 

    return res 

if __name__ == '__main__': 
    import doctest 
    doctest.testmod() 

正如你可以看到我,如果你不使用stdout使用的subprocess.check_call函數的自變量stdout所以能夠得到命令的輸出,即旁參數(我認爲這是你的情況)我認爲很難捕獲命令輸出。

希望這是充滿希望:)

+0

爲什麼模式'r +',不應該至少是'w'嗎? – Geo 2011-06-10 10:21:01

+0

@Geo:實際上,事實上默認模式是'w + b',所以當我第一次讀它時,我不需要給出模式參數,我讀了'wb'。我的不好的固定謝謝。:) – mouad 2011-06-10 10:30:42

相關問題