code: def mac_keyboard_process(pipe):
      
      # pylint: disable=import-error,too-many-locals
      # Note Objective C does not support a Unix style fork.
      # So these imports have to be inside the child subprocess since
      # otherwise the child process cannot use them.
  
      # pylint: disable=no-member, no-name-in-module
      from AppKit import NSApplication, NSApp
      from Foundation import NSObject
      from Cocoa import (NSEvent, NSKeyDownMask, NSKeyUpMask,
                         NSFlagsChangedMask)
      from PyObjCTools import AppHelper
      import objc
  
      class MacKeyboardSetup(NSObject):
          """Setup the handler."""
  
          @objc.python_method
          def init_with_handler(self, handler):
              """
              Init method that receives the write end of the pipe.
              """
              # ALWAYS call the super's designated initializer.
              # Also, make sure to re-bind "self" just in case it
              # returns something else!
  
              # pylint: disable=self-cls-assignment
              self = super(MacKeyboardSetup, self).init()
  
              self.handler = handler
  
              # Unlike Python's __init__, initializers MUST return self,
              # because they are allowed to return any object!
              return self
  
          # pylint: disable=invalid-name, unused-argument
          def applicationDidFinishLaunching_(self, notification):
              """Bind the handler to listen to keyboard events."""
              mask = NSKeyDownMask | NSKeyUpMask | NSFlagsChangedMask
              NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(
                  mask, self.handler)
  
      class MacKeyboardListener(AppKitKeyboardListener):
          """Loosely emulate Evdev keyboard behaviour on the Mac.
          Listen for key events then buffer them in a pipe.
          """
          def install_handle_input(self):
              """Install the hook."""
              self.app = NSApplication.sharedApplication()
              # pylint: disable=no-member
              delegate = MacKeyboardSetup.alloc().init_with_handler(
                  self.handle_input)
              NSApp().setDelegate_(delegate)
              AppHelper.runEventLoop()
  
          def __del__(self):
              """Stop the listener on deletion."""
              AppHelper.stopEventLoop()
  
      # pylint: disable=unused-variable
      keyboard = MacKeyboardListener(pipe)
docs: Single subprocesses for reading keyboard on Mac.