20141208 (Monday, 08 December 2014)

Run subprocesses on Windows

Taavi reported the following problem on a Windows computer:

FAIL: test_jsgen (tests.UtilsTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "c:\mypy\repositories\lino\tests\__init__.py", line 146, in test_jsgen
    def test_jsgen(self): self.run_simple_doctests('lino/utils/jsgen.py')
  File "c:\mypy\repositories\atelier\atelier\test.py", line 70, in run_simple_doctests
    self.run_subprocess(args, **kw)
  File "c:\mypy\repositories\atelier\atelier\test.py", line 54, in run_subprocess
    self.fail(msg)
AssertionError: C:\Python27\python.exe -m atelier.doctest_utf8 lino/utils/jsgen.py ({}) returned 1:
-----
Traceback (most recent call last):
  File "C:\Python27\lib\runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "C:\Python27\lib\runpy.py", line 72, in _run_code
    exec code in run_globals
  File "c:\mypy\repositories\atelier\atelier\doctest_utf8.py", line 16, in <module>
    import doctest
  File "C:\Python27\lib\doctest.py", line 99, in <module>
    import unittest, difflib, pdb, tempfile
  File "C:\Python27\lib\tempfile.py", line 35, in <module>
    from random import Random as _Random
  File "C:\Python27\lib\random.py", line 885, in <module>
    _inst = Random()
  File "C:\Python27\lib\random.py", line 97, in __init__
    self.seed(x)
  File "C:\Python27\lib\random.py", line 113, in seed
    a = long(_hexlify(_urandom(2500)), 16)
WindowsError: [Error -2146893818] Invalid Signature

Tim Golden helped me to undestand that this was because on Windows some system environment variables are needed when you ask for a temporary file name.

To solve this, I changed atelier.utils.SubProcessParent.build_environment() method so that it is filled from os.environ.

Developing on Windows? No thanks!

After two hours of fiddling we still didn’t get the test suite to pass on Taavi’s Windows machine. The last thing before we stopped was a test failure in lino.utils.html2xhtml. I am afraid that this is due to the fact that the developers of HtmlTidy don’t seem to care very much about a Windows binary version. See PyTidyLib and HtmlTidy.

The easiest solution to all these problems is that Taavi moves from Windows to Linux.