Skip to content

Generate PowerShell wrappers for emcc & co. #18213

@RReverser

Description

@RReverser

When trying to interrupt test runner on Windows, I'm getting a very verbose output from various parallel processes, e.g.:

Test suites:
['test_core']
Running test_core: (5 tests)
Using 5 parallel test processes
cache:INFO: generating system headers: sysroot_install.stamp... (this will be cached in "C:\Users\me\Documents\emscripten\cache\sysroot_install.stamp" for subsequent builds)
emcc:WARNING: KeyboardInterruptrunner:WARNING: KeyboardInterrupt
emcc:WARNING: KeyboardInterruptemcc:WARNING: KeyboardInterruptemcc:WARNING: KeyboardInterrupt
emcc:WARNING: KeyboardInterrupt
Terminate batch job (Y/N)? Terminate batch job (Y/N)? Terminate batch job (Y/N)? Terminate batch job (Y/N)? Terminate batch job (Y/N)? ^^^^^CCCCC
test_hello_argc_standalone (test_core.core0) ... ERROR
Process Process-4:
Traceback (most recent call last):
  File "C:\Python38\lib\unittest\case.py", line 676, in run
    self._callTestMethod(testMethod)
  File "C:\Python38\lib\unittest\case.py", line 633, in _callTestMethod
    method()
  File "C:\Users\me\Documents\emscripten\test\common.py", line 376, in resulting_test
    return func(self, *args)
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 244, in metafunc
    func(self)
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 484, in test_hello_argc
    self.do_core_test('test_hello_argc.c', args=['hello', 'world'])
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 441, in do_core_test
    self.do_run_in_out_file_test(Path('core', testname), **kwargs)
  File "C:\Users\me\Documents\emscripten\test\common.py", line 1210, in do_run_in_out_file_test
    output = self._build_and_run(srcfile, expected, **kwargs)
  File "C:\Users\me\Documents\emscripten\test\common.py", line 1230, in _build_and_run
    js_file = self.build(filename, libraries=libraries, includes=includes,
  File "C:\Users\me\Documents\emscripten\test\common.py", line 689, in build
    self.run_process(cmd, stderr=self.stderr_redirect if not DEBUG else None)
  File "C:\Users\me\Documents\emscripten\test\common.py", line 1017, in run_process
    return shared.run_process(cmd, check=check, **args)
  File "C:\Users\me\Documents\emscripten\tools\shared.py", line 110, in run_process
    ret = subprocess.run(cmd, check=check, input=input, *args, **kw)
  File "C:\Python38\lib\subprocess.py", line 491, in run
    stdout, stderr = process.communicate(input, timeout=timeout)
  File "C:\Python38\lib\subprocess.py", line 1016, in communicate
    self.wait()
  File "C:\Python38\lib\subprocess.py", line 1079, in wait
    return self._wait(timeout=timeout)
  File "C:\Python38\lib\subprocess.py", line 1357, in _wait
    result = _winapi.WaitForSingleObject(self._handle,
KeyboardInterrupt

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 24, in g_testing_thread
    test(result)
  File "C:\Python38\lib\unittest\case.py", line 736, in __call__
    return self.run(*args, **kwds)
  File "C:\Python38\lib\unittest\case.py", line 695, in run
    result.stopTest(self)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 141, in stopTest
    self.buffered_result.duration = time.perf_counter() - self.start_time
AttributeError: 'NoneType' object has no attribute 'duration'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python38\lib\multiprocessing\process.py", line 315, in _bootstrap
    self.run()
  File "C:\Python38\lib\multiprocessing\process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 28, in g_testing_thread
    result.addError(test, e)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 168, in addError
    self.buffered_result = BufferedTestError(test, err)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 176, in __init__
    exctype, value, tb = err
TypeError: cannot unpack non-iterable AttributeError object
^^^C^CCC
test_hello_world (test_core.core0) ... ERROR
Process Process-1:
Traceback (most recent call last):
  File "C:\Python38\lib\unittest\case.py", line 676, in run
    self._callTestMethod(testMethod)
  File "C:\Python38\lib\unittest\case.py", line 633, in _callTestMethod
    method()
  File "C:\Users\me\Documents\emscripten\test\common.py", line 376, in resulting_test
    return func(self, *args)
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 229, in metafunc
    func(self)
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 196, in decorated
    func(self)
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 473, in test_hello_world
    self.do_core_test('test_hello_world.c')
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 441, in do_core_test
    self.do_run_in_out_file_test(Path('core', testname), **kwargs)
  File "C:\Users\me\Documents\emscripten\test\common.py", line 1210, in do_run_in_out_file_test
    output = self._build_and_run(srcfile, expected, **kwargs)
  File "C:\Users\me\Documents\emscripten\test\common.py", line 1230, in _build_and_run
    js_file = self.build(filename, libraries=libraries, includes=includes,
  File "C:\Users\me\Documents\emscripten\test\common.py", line 689, in build
    self.run_process(cmd, stderr=self.stderr_redirect if not DEBUG else None)
  File "C:\Users\me\Documents\emscripten\test\common.py", line 1017, in run_process
    return shared.run_process(cmd, check=check, **args)
  File "C:\Users\me\Documents\emscripten\tools\shared.py", line 110, in run_process
    ret = subprocess.run(cmd, check=check, input=input, *args, **kw)
  File "C:\Python38\lib\subprocess.py", line 491, in run
    stdout, stderr = process.communicate(input, timeout=timeout)
  File "C:\Python38\lib\subprocess.py", line 1016, in communicate
    self.wait()
  File "C:\Python38\lib\subprocess.py", line 1079, in wait
    return self._wait(timeout=timeout)
  File "C:\Python38\lib\subprocess.py", line 1357, in _wait
    result = _winapi.WaitForSingleObject(self._handle,
KeyboardInterrupt

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 24, in g_testing_thread
    test(result)
  File "C:\Python38\lib\unittest\case.py", line 736, in __call__
    return self.run(*args, **kwds)
  File "C:\Python38\lib\unittest\case.py", line 695, in run
    result.stopTest(self)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 141, in stopTest
    self.buffered_result.duration = time.perf_counter() - self.start_time
AttributeError: 'NoneType' object has no attribute 'duration'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python38\lib\multiprocessing\process.py", line 315, in _bootstrap
    self.run()
  File "C:\Python38\lib\multiprocessing\process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 28, in g_testing_thread
    result.addError(test, e)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 168, in addError
    self.buffered_result = BufferedTestError(test, err)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 176, in __init__
    exctype, value, tb = err
TypeError: cannot unpack non-iterable AttributeError object
^^CC^C
test_hello_world_standalone (test_core.core0) ... ERROR
Process Process-3:
Traceback (most recent call last):
  File "C:\Python38\lib\unittest\case.py", line 676, in run
    self._callTestMethod(testMethod)
  File "C:\Python38\lib\unittest\case.py", line 633, in _callTestMethod
    method()
  File "C:\Users\me\Documents\emscripten\test\common.py", line 376, in resulting_test
    return func(self, *args)
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 244, in metafunc
    func(self)
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 196, in decorated
    func(self)
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 473, in test_hello_world
    self.do_core_test('test_hello_world.c')
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 441, in do_core_test
    self.do_run_in_out_file_test(Path('core', testname), **kwargs)
  File "C:\Users\me\Documents\emscripten\test\common.py", line 1210, in do_run_in_out_file_test
    output = self._build_and_run(srcfile, expected, **kwargs)
  File "C:\Users\me\Documents\emscripten\test\common.py", line 1230, in _build_and_run
    js_file = self.build(filename, libraries=libraries, includes=includes,
  File "C:\Users\me\Documents\emscripten\test\common.py", line 689, in build
    self.run_process(cmd, stderr=self.stderr_redirect if not DEBUG else None)
  File "C:\Users\me\Documents\emscripten\test\common.py", line 1017, in run_process
    return shared.run_process(cmd, check=check, **args)
  File "C:\Users\me\Documents\emscripten\tools\shared.py", line 110, in run_process
    ret = subprocess.run(cmd, check=check, input=input, *args, **kw)
  File "C:\Python38\lib\subprocess.py", line 491, in run
    stdout, stderr = process.communicate(input, timeout=timeout)
  File "C:\Python38\lib\subprocess.py", line 1016, in communicate
    self.wait()
  File "C:\Python38\lib\subprocess.py", line 1079, in wait
    return self._wait(timeout=timeout)
  File "C:\Python38\lib\subprocess.py", line 1357, in _wait
    result = _winapi.WaitForSingleObject(self._handle,
KeyboardInterrupt

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 24, in g_testing_thread
    test(result)
  File "C:\Python38\lib\unittest\case.py", line 736, in __call__
    return self.run(*args, **kwds)
  File "C:\Python38\lib\unittest\case.py", line 695, in run
    result.stopTest(self)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 141, in stopTest
    self.buffered_result.duration = time.perf_counter() - self.start_time
AttributeError: 'NoneType' object has no attribute 'duration'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python38\lib\multiprocessing\process.py", line 315, in _bootstrap
    self.run()
  File "C:\Python38\lib\multiprocessing\process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 28, in g_testing_thread
    result.addError(test, e)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 168, in addError
    self.buffered_result = BufferedTestError(test, err)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 176, in __init__
    exctype, value, tb = err
TypeError: cannot unpack non-iterable AttributeError object
^^CC
test_hello_argc_pthreads (test_core.core0) ... ERROR
Process Process-5:
Traceback (most recent call last):
  File "C:\Python38\lib\unittest\case.py", line 676, in run
    self._callTestMethod(testMethod)
  File "C:\Python38\lib\unittest\case.py", line 633, in _callTestMethod
    method()
  File "C:\Users\me\Documents\emscripten\test\common.py", line 200, in decorated
    f(self, *args, **kwargs)
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 490, in test_hello_argc_pthreads
    self.do_core_test('test_hello_argc.c', args=['hello', 'world'])
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 441, in do_core_test
    self.do_run_in_out_file_test(Path('core', testname), **kwargs)
  File "C:\Users\me\Documents\emscripten\test\common.py", line 1210, in do_run_in_out_file_test
    output = self._build_and_run(srcfile, expected, **kwargs)
  File "C:\Users\me\Documents\emscripten\test\common.py", line 1230, in _build_and_run
    js_file = self.build(filename, libraries=libraries, includes=includes,
  File "C:\Users\me\Documents\emscripten\test\common.py", line 689, in build
    self.run_process(cmd, stderr=self.stderr_redirect if not DEBUG else None)
  File "C:\Users\me\Documents\emscripten\test\common.py", line 1017, in run_process
    return shared.run_process(cmd, check=check, **args)
  File "C:\Users\me\Documents\emscripten\tools\shared.py", line 110, in run_process
    ret = subprocess.run(cmd, check=check, input=input, *args, **kw)
  File "C:\Python38\lib\subprocess.py", line 491, in run
    stdout, stderr = process.communicate(input, timeout=timeout)
  File "C:\Python38\lib\subprocess.py", line 1016, in communicate
    self.wait()
  File "C:\Python38\lib\subprocess.py", line 1079, in wait
    return self._wait(timeout=timeout)
  File "C:\Python38\lib\subprocess.py", line 1357, in _wait
    result = _winapi.WaitForSingleObject(self._handle,
KeyboardInterrupt

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 24, in g_testing_thread
    test(result)
  File "C:\Python38\lib\unittest\case.py", line 736, in __call__
    return self.run(*args, **kwds)
  File "C:\Python38\lib\unittest\case.py", line 695, in run
    result.stopTest(self)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 141, in stopTest
    self.buffered_result.duration = time.perf_counter() - self.start_time
AttributeError: 'NoneType' object has no attribute 'duration'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python38\lib\multiprocessing\process.py", line 315, in _bootstrap
    self.run()
  File "C:\Python38\lib\multiprocessing\process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 28, in g_testing_thread
    result.addError(test, e)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 168, in addError
    self.buffered_result = BufferedTestError(test, err)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 176, in __init__
    exctype, value, tb = err
TypeError: cannot unpack non-iterable AttributeError object
^C
test_hello_argc (test_core.core0) ... ERROR
Process Process-2:
Traceback (most recent call last):
  File "C:\Python38\lib\unittest\case.py", line 676, in run
    self._callTestMethod(testMethod)
  File "C:\Python38\lib\unittest\case.py", line 633, in _callTestMethod
    method()
  File "C:\Users\me\Documents\emscripten\test\common.py", line 376, in resulting_test
    return func(self, *args)
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 229, in metafunc
    func(self)
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 484, in test_hello_argc
    self.do_core_test('test_hello_argc.c', args=['hello', 'world'])
  File "C:\Users\me\Documents\emscripten\test\test_core.py", line 441, in do_core_test
    self.do_run_in_out_file_test(Path('core', testname), **kwargs)
  File "C:\Users\me\Documents\emscripten\test\common.py", line 1210, in do_run_in_out_file_test
    output = self._build_and_run(srcfile, expected, **kwargs)
  File "C:\Users\me\Documents\emscripten\test\common.py", line 1230, in _build_and_run
    js_file = self.build(filename, libraries=libraries, includes=includes,
  File "C:\Users\me\Documents\emscripten\test\common.py", line 689, in build
    self.run_process(cmd, stderr=self.stderr_redirect if not DEBUG else None)
  File "C:\Users\me\Documents\emscripten\test\common.py", line 1017, in run_process
    return shared.run_process(cmd, check=check, **args)
  File "C:\Users\me\Documents\emscripten\tools\shared.py", line 110, in run_process
    ret = subprocess.run(cmd, check=check, input=input, *args, **kw)
  File "C:\Python38\lib\subprocess.py", line 491, in run
    stdout, stderr = process.communicate(input, timeout=timeout)
  File "C:\Python38\lib\subprocess.py", line 1016, in communicate
    self.wait()
  File "C:\Python38\lib\subprocess.py", line 1079, in wait
    return self._wait(timeout=timeout)
  File "C:\Python38\lib\subprocess.py", line 1357, in _wait
    result = _winapi.WaitForSingleObject(self._handle,
KeyboardInterrupt

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 24, in g_testing_thread
    test(result)
  File "C:\Python38\lib\unittest\case.py", line 736, in __call__
    return self.run(*args, **kwds)
  File "C:\Python38\lib\unittest\case.py", line 695, in run
    result.stopTest(self)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 141, in stopTest
    self.buffered_result.duration = time.perf_counter() - self.start_time
AttributeError: 'NoneType' object has no attribute 'duration'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python38\lib\multiprocessing\process.py", line 315, in _bootstrap
    self.run()
  File "C:\Python38\lib\multiprocessing\process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 28, in g_testing_thread
    result.addError(test, e)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 168, in addError
    self.buffered_result = BufferedTestError(test, err)
  File "C:\Users\me\Documents\emscripten\test\parallel_testsuite.py", line 176, in __init__
    exctype, value, tb = err
TypeError: cannot unpack non-iterable AttributeError object
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "C:\Python38\lib\multiprocessing\util.py", line 357, in _exit_function
    p.join()
  File "C:\Python38\lib\multiprocessing\process.py", line 149, in join
    res = self._popen.wait(timeout)
  File "C:\Python38\lib\multiprocessing\popen_spawn_win32.py", line 108, in wait
    res = _winapi.WaitForSingleObject(int(self._handle), msecs)
KeyboardInterrupt

Aside from that, for some weird reason when I run tests and interrupt them in VSCode Terminal instead of ConEmu or standard Windows thing, the VSCode terminal often becomes completely unuseable and behaves as if all my input keys are still piped elsewhere (into the test runner process?) so I can't execute any other commands on the command line w/o restarting the terminal.

I realise this is not a particularly helpful explanation or amount of details, but I'm not sure what else to add w/o someone also trying this out on Windows.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions