subprocess.Popen ("pytest") возвращает 2, хотя pytest возвращает 1 - PullRequest
0 голосов
/ 18 июня 2019

Я запускаю pytest от subprocess.Popen.

Как видно из приведенного ниже кода и его вывода, pytest завершается с кодом выхода 1, но процесс считает, что он завершился с кодом выхода 2. Почему? (в настоящее время думаю, что это ошибка Pytest [ошибка соответствует описанию, но не коду, который заставляет меня думать, что они забыли обновить его))

[Сама ошибка не является проблемой (она возникает из-за наличия нескольких конфликтующих файлов, и это нормально, поскольку я хочу создавать ошибки)]

In [1]:     from subprocess import Popen
   ...:     p = Popen('pytest -s -k some_phrase'.split())
   ...:     p.communicate()
   ...:     print p.poll()
   ...: 



Test session starts (platform: linux2, Python 2.7.12, pytest 4.5.0, pytest-sugar 0.9.2)
rootdir: /...
plugins: timeout-1.3.3, sugar-0.9.2, repeat-0.8.0, metadata-1.8.0, html-1.20.0, cov-2.7.1
collecting ... Failed to import pybind11_tests from pytest:
  ImportError: No module named pybind11_tests

―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― test session ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
.../local/lib/python2.7/site-packages/py/_path/common.py:377: in visit
    for x in Visitor(fil, rec, ignore, bf, sort).gen(self):
.../local/lib/python2.7/site-packages/py/_path/common.py:429: in gen
    for p in self.gen(subdir):
.../local/lib/python2.7/site-packages/py/_path/common.py:429: in gen
    for p in self.gen(subdir):
.../local/lib/python2.7/site-packages/py/_path/common.py:429: in gen
    for p in self.gen(subdir):
.../local/lib/python2.7/site-packages/py/_path/common.py:419: in gen
    if p.check(dir=1) and (rec is None or rec(p))])
.../local/lib/python2.7/site-packages/_pytest/main.py:660: in _recurse
    ihook = self.gethookproxy(dirpath)
.../local/lib/python2.7/site-packages/_pytest/main.py:481: in gethookproxy
    my_conftestmodules = pm._getconftestmodules(fspath)
.../local/lib/python2.7/site-packages/_pytest/config/__init__.py:421: in _getconftestmodules
    mod = self._importconftest(conftestpath.realpath())
.../local/lib/python2.7/site-packages/_pytest/config/__init__.py:443: in _importconftest
    mod = conftestpath.pyimport()
.../local/lib/python2.7/site-packages/py/_path/local.py:668: in pyimport
    __import__(modname)
.../local/lib/python2.7/site-packages/_pytest/assertion/rewrite.py:301: in load_module
    exec(co, mod.__dict__)
...
    sys.exit(1)
E   SystemExit: 1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Results (0.44s):
2

Кстати, я проверил то же самое, используя os.system('pytest -s -k bla'), и там я получил код ошибки 512. Кажется, что код выхода не распространяется должным образом ...


Я повторил попытку с новой ожидаемой ошибкой - теперь я не ожидаю, что тесты собраны, и кажется, что код ошибки правильный:

In [3]:     from subprocess import Popen, PIPE, check_output
   ...:     p = Popen('pytest --disable-warnings -s -k some_phrase', shell=True)
   ...:     p.communicate()
   ...:     print p.poll()
   ...: 
...

Results (2.59s):
    4275 deselected
5 

И это правильный код, для pytest

Возможные коды выхода Запуск pytest может привести к шести различным кодам выхода:

Exit code 0:    All tests were collected and passed successfully
Exit code 1:    Tests were collected and run but some of the tests failed
Exit code 2:    Test execution was interrupted by the user
Exit code 3:    Internal error happened while executing tests
Exit code 4:    pytest command line usage error
Exit code 5:    No tests were collected   <----
...