[TIP] py.test fails when called via nant with "ValueError: saved filedescriptor not valid, did you call start() twice?"

Berthold Hoellmann berthold at despammed.com
Tue Jan 29 08:23:33 PST 2013

I try to add pytest to a larger Python library of mine. Main development
system is Linux, but the software has to run on Windows also. We are
using CC.NET as CI tool.

The software has a complex build system which is controlled by a
Makefile. This Makefile system controls my tests also, so when i started
to use pytest it was added to the make system. The make makes heavy use
of UNIX tools and so it is run under CYGWIN under Windows.

For some of the tests specific environment variables have to be set. The
system for setting environment variables in CC.NET does not ensure given
case in the variable names so I had to add an nant script to ensure the
correct environment variables are set for some of the tools.

And this nant system seems to case trouble for me. When I start the make
command from out Windows Server 2008 R2 command line the tests are
working, but when I use the NANT script, which in turn calls make I get
errors from py.test:


[exec] PYTHONPATH="D:/ContinuousIntegration/Builds/checkout/GLPy/build/lib;D:/ContinuousIntegration/Builds/checkout/GLPy/build/lib.win32-2.7;" python -tt -m pytest --ignore=../lib/gl/BSXF/create/get_sxf_structure.py --ignore=../lib/gl/Buckling/buckling.py --ignore=../lib/gl/Jinc/jinc_database.py --ignore=../lib/gl/Priefas/ReadPropForcesXML.py --ignore=../lib/gl/Vibration/amls/matrix/testColsArray.py --ignore=../lib/gl/Vibration/amls/test.py --ignore=../lib/gl/Vibration/lanczos/lan.py --ignore=../lib/gl/fevtk.py --ignore=../lib/gl/forcesum.py --ignore=../lib/gl/Vibration --ignore=../lib/gl/FastBEM --ignore=../lib/gl/AnsysInterface --ignore=../lib/gl/Simulation  \
     [exec]   --doctest-modules ../lib/gl/
     [exec] Traceback (most recent call last):
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\runpy.py", line 162, in _run_module_as_main
     [exec]     "__main__", fname, loader, pkg_name)
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\runpy.py", line 72, in _run_code
     [exec]     exec code in run_globals
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\site-packages\pytest.py", line 9, in <module>
     [exec]     raise SystemExit(pytest.main())
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\site-packages\_pytest\core.py", line 473, in main
     [exec]     config = _prepareconfig(args, plugins)
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\site-packages\_pytest\core.py", line 463, in _prepareconfig
     [exec]     pluginmanager=_pluginmanager, args=args)
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\site-packages\_pytest\core.py", line 422, in __call__
     [exec]     return self._docall(methods, kwargs)
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\site-packages\_pytest\core.py", line 433, in _docall
     [exec]     res = mc.execute()
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\site-packages\_pytest\core.py", line 351, in execute
     [exec]     res = method(**kwargs)
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\site-packages\_pytest\helpconfig.py", line 25, in pytest_cmdline_parse
     [exec]     config = __multicall__.execute()
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\site-packages\_pytest\core.py", line 351, in execute
     [exec]     res = method(**kwargs)
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\site-packages\_pytest\config.py", line 10, in pytest_cmdline_parse
     [exec]     config.parse(args)
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\site-packages\_pytest\config.py", line 373, in parse
     [exec]     self._preparse(args)
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\site-packages\_pytest\config.py", line 351, in _preparse
     [exec]     self._setinitialconftest(args)
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\site-packages\_pytest\config.py", line 327, in _setinitialconftest
     [exec]     capman.resumecapture()
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\site-packages\_pytest\capture.py", line 101, in resumecapture
     [exec]     cap.startall()
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\site-packages\py\_io\capture.py", line 229, in startall
     [exec]     self.in_.start()
     [exec]   File "C:\Program Files (x86)\GL Programs\GLPythonDist\Python27\lib\site-packages\py\_io\capture.py", line 56, in start
     [exec]     raise ValueError("saved filedescriptor not valid, "
     [exec] ValueError: saved filedescriptor not valid, did you call start() twice?

First I thought of it as problem in one of my libraries, but the error
also appears when I ignore all tests at the command line. I was not able
to find information on this error that made sense for me. 

What can I do to make this run?

pytest ist version 2.3.4


                            __   Address:
                         G /  \ L Germanischer Lloyd SE
phone: +49-40-36149-7374 -+----+- Brooktorkai 18
fax  : +49-40-36149-7320   \__/   D-20457 Hamburg

More information about the testing-in-python mailing list