Я запускаю интеграционные тесты с Nose. В одном из моих тестов мне нужно получить вывод и проанализировать его, чтобы найти определенную строку.
def test_diagnostic_tool():
with Capturing() as output:
failures = run_integration_testing_exe('*', test_exe='DiagnosticTool.exe', use_default_composed_filter=False)
eq_(failures, 0)
class Capturing(list):
def __enter__(self):
self._stdout = sys.stdout
sys.stdout = self._stringio = StringIO()
return self
def __exit__(self, *args):
self.extend(self._stringio.getvalue().splitlines())
sys.stdout = self._stdout
Это не работает. Переменная «output» содержит только небольшую строку из печати где-то в структуре вызова.
Функция run_integration_testing_exe вызывает другую функцию, и там вызывается внешняя программа exe. В оболочке все выводится нормально, поэтому мне было интересно, есть ли способ захватить все это и проанализировать.
subprocess.Popen
вызывается, если это то, что запускает exe. - person deinonychusaur   schedule 15.07.2014DiagnosticTool.exe
, вам, вероятно, не повезло изнутри python. - person deinonychusaur   schedule 15.07.2014nose
имеет аргумент командной строки--no-capture
, который сохраняетstdout
в тестовых фикстурах, что позволит вам захватить/разобратьstdout
вашего нового процесса. - person blakev   schedule 15.07.2014