Ich verwende nose, um eine Anwendung zu testen, die subprocess.Popen()
verwendet, um ein Skript aufzurufen. Weder das capture noch logcapture Plugin scheint die Ausgabe dieses Skripts zu erfassen. Gibt es eine einfache Möglichkeit, diesen Ausgang in die Nase zu leiten?Erfassen der Ausgabe von subprocess.Popen() mit Nase
Hier ist, was ich bisher versucht habe; beachten Sie "Capture me" nicht erfasst:
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
Ausgang:
$ 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
Warum der benutzerdefinierte 'stdout' Parameter, wenn Sie ihn trotzdem an' sys.stdout 'senden? Hast du ohne versucht? – Wolph
Es war nur ein Versuch, 'Popen()' zu zwingen, seine Ausgabe an Nase zu senden. Die Ausgabe ist ohne sie identisch. – pmdarrow
Alternativ, wenn Sie für die Ausgabe suchen, versuchen Sie 'subprocess.check_output()' –