Hi Fabian,
thanks for the details, I can reproduce the issue now.
This seems to be an issue introduced with Spyder 3 (see
https://github.com/spyder-ide/spyder/issues/3529) and apparently has to
do with the way the ipython console is integrated. They have fixed the
issue for external process calls that use the subprocess module, but in
our case the code will be compiled with Python's standard distutils
mechanism which internally uses the function os.spawnv. We could "monkey
patch" this function to avoid the problem, but I am hesitant to do this
automatically in Brian. This would change a very low-level function in
Python itself, which could potentially introduce new problems. We could
potentially make it optional via a preference, or require an explicit
function call by the user, though. I'll open an issue on github to
discuss this further.
Until then, I see two workarounds:
1. Instead of executing the script in the integrated ipython console,
you switch the run configuration to "Execute in an external system terminal"
2. You do the monkey patching of os.spawnv yourself in a snippet that
you execute at the beginning of your simulation. On my machine the
following works, but it might not be the best/most robust way of doing it:
# Monkey patch spawnv
import os
_orig_spawnv = os.spawnv
def _patched_spawnv(*args, **kwds):
if args[0] != os.P_WAIT:
return _orig_spawnv(*args, **kwds)
import subprocess
ret_val = subprocess.call(" ".join(args[2][:]),
creationflags=0x08000000, # CREATE_NO_WINDOW
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
shell=True)
return ret_val
os.spawnv = _patched_spawnv
Best,
Marcel