Używam nose do testowania aplikacji używającej subprocess.Popen()
do wywoływania skryptu. Ani wtyczka capture ani logcapture nie wydają się przechwytywać wyjścia tego skryptu. Czy istnieje prosty sposób na wyprowadzenie tego wyjścia do nosa?Przechwytywanie danych wyjściowych podprocesu.Popen() z nosem
Oto, co próbowałem do tej pory; Uwaga: "Uchwyć mnie" nie jest zrobione:
example.py:
if __name__ == '__main__':
print 'Capture me'
test.py:
import subprocess
import sys
def test_popen():
# nose's capture plugin replaces sys.stdout with a StringIO instance.
# subprocess.Popen() expects stdout to have a fileno property, which
# StringIO doesn't, so fake it.
sys.stdout.fileno = lambda: 1
subprocess.Popen(['python', 'example.py'], stdout=sys.stdout)
assert False # Force test to fail so we see nose output
wyjście:
$ nosetests test.py
F
======================================================================
FAIL: test.test_popen
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/pmdarrow/Envs/example/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/Users/pmdarrow/Code/example/API/test.py", line 8, in test_popen
assert False
AssertionError
----------------------------------------------------------------------
Ran 1 test in 0.004s
FAILED (failures=1)
Capture me
Dlaczego niestandardowy parametr 'stdout', jeśli wysyłasz go do' sys.stdout'? Czy próbowałeś bez? – Wolph
To była tylko próba zmuszenia 'Popen()' do wysyłania swoich wyników do nosa. Dane wyjściowe są bez niego takie same. – pmdarrow
Alternatywnie, jeśli szukasz wyjścia, spróbuj 'subprocess.check_output()' –