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