ValueError с использованием подпроцесса проверки носа

Я хотел бы получить тот же вывод, что и при запуске os.system:

os.system('nosetests TestStateMachine.py:FluidityTest.test_it_has_an_initial_state -v')
test_it_has_an_initial_state (TestStateMachine.FluidityTest) ... ok

----------------------------------------------------------------------
Ran 1 test in 0.001s

OK
Out[5]: 0

Но когда я выполняю:

x = subprocess.Popen(["nosetests",
"TestStateMachine.py:FluidityTest.test_it_has_an_initial_state -v"],
stdout=subprocess.PIPE)

Я собираюсь:

E
======================================================================
ERROR: Failure: ValueError (No such test FluidityTest.test_it_has_an_initial_state -v)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/nose/failure.py", line 41, in runTest
raise self.exc_class(self.exc_val)
ValueError: No such test FluidityTest.test_it_has_an_initial_state -v

----------------------------------------------------------------------
Ran 1 test in 0.034s

FAILED (errors=1)

1 ответ

Решение

Вы используете неправильную командную строку. Вот правильный:

x = subprocess.Popen(["nosetests",
    "TestStateMachine.py:FluidityTest.test_it_has_an_initial_state",
    "-v"],
    stdout=subprocess.PIPE)

Список, который вы передаете Popen уже представляет разобранную командную строку. Поместив название теста и -v в той же строке это как если бы вы их цитировали, например:

$nosetests "TestStateMachine.py:FluidityTest.test_it_has_an_initial_state -v"

В командной строке и -v заканчивается именем теста (внимательно прочитайте полученную ошибку...)

Другие вопросы по тегам