Returns logger to receive Python messages (as opposed to Fortran).

    At first call, _python_logger is created. At subsequent calls, _python_logger is returned. 
    Therefore, if you want to change `a99.flag_log_file` or `a99.flag_log_console`, do so 
    before calling get_python_logger(), otherwise these changes will be ineffective.

def get_python_logger():
    """Returns logger to receive Python messages (as opposed to Fortran).

    At first call, _python_logger is created. At subsequent calls, _python_logger is returned. 
    Therefore, if you want to change `a99.flag_log_file` or `a99.flag_log_console`, do so 
    before calling get_python_logger(), otherwise these changes will be ineffective.
    """
    global _python_logger
    if _python_logger is None:
        fn = "a99.log"
        l = logging.Logger("a99", level=a99.logging_level)
        if a99.flag_log_file:
            add_file_handler(l, fn)
        if a99.flag_log_console:
            ch = logging.StreamHandler()
            ch.setFormatter(_fmtr)
            l.addHandler(ch)
        _python_logger = l
        for line in a99.format_box("a99 logging session started @ {}".format(a99.now_str())):
            l.info(line)
        if a99.flag_log_file:
            l.info("$ Logging to console $")
        if a99.flag_log_file:
            l.info("$ Logging to file '{}' $".format(fn))

    return _python_logger