Call to Py_Initialize changes signal handler configuration

Environment

  • Pythonnet version:
    2.3.0
  • Python version:
    Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)] on win32
  • Operating System:
    Win 7, 64 bit

Details

  • What I'm trying to do:
    Console application with CTRL+C handling.

According to https://docs.python.org/2/c-api/init.html, Py_Initialize() changes the current signal configuration. In practice, signals like interrupt from CTRL+C in a console application seems to be ignored, which is not the desired behavior. This means that the event handler configured as this Console.CancelKeyPress += Console_CancelKeyPress; does nothing.

It seems Py_InitializeEx(0) should be used for general applications that does not include a python terminal. Alternatively, whether to use the Py_InitalizeEx(0) could be a argument to Python.Initialize()

To reproduce try running this:

class Program
    {
        static void Main(string[] args)
        {
            PythonEngine.Initialize(); // Comment this out to support CTRL+C again.
            Console.WriteLine("Waiting 5s.. Try CTRL+C.");
            System.Threading.Thread.Sleep(5000);
            Console.WriteLine("Done");
        }
    }