Bir komut dosyasını çağırmak için subprocess.Popen()
kullanan bir uygulamayı sınamak için nose kullanıyorum. Bu betiğin çıktısını yakalamak için capture veya logcapture eklentisi görünmüyor. Bu çıkışı burnuna sokmanın kolay bir yolu var mı?Alt işlemin çıktısını yakalama.Popen() burun ile
Şimdiye kadar denediğim şey; note "Bana Yakalama" yakalanan değildir:
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
çıkış:
$ 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
Özel "stdout" parametresi niçin 'sys.stdout' öğesine gönderiyor? Sen denedin mi? – Wolph
Sadece Popen() 'i çıkışını burnuna göndermek için zorlama girişimiydi. Çıkış, o olmadan aynıdır. – pmdarrow
alternatif olarak çıktı arıyorsanız, subprocess.check_output() ' –