<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def get_file_from_iso_fp(self, outfp, **kwargs):
        # type: (BinaryIO, Any) -> None
        '''
        A method to fetch a single file from the ISO and write it out
        to the file object.

        Parameters:
         outfp - The file object to write data to.
         blocksize - The number of bytes in each transfer.
         iso_path - The absolute ISO9660 path to lookup on the ISO (exclusive
                    with rr_path, joliet_path, and udf_path).
         rr_path - The absolute Rock Ridge path to lookup on the ISO (exclusive
                   with iso_path, joliet_path, and udf_path).
         joliet_path - The absolute Joliet path to lookup on the ISO (exclusive
                       with iso_path, rr_path, and udf_path).
         udf_path - The absolute UDF path to lookup on the ISO (exclusive with
                    iso_path, rr_path, and joliet_path).
        Returns:
         Nothing.
        '''
        if not self._initialized:
            raise pycdlibexception.PyCdlibInvalidInput('This object is not yet initialized; call either open() or new() to create an ISO')

        blocksize = 8192
        joliet_path = None
        iso_path = None
        rr_path = None
        udf_path = None
        num_paths = 0
        for key in kwargs:
            if key == 'blocksize':
                blocksize = kwargs[key]
            elif key == 'iso_path' and kwargs[key] is not None:
                iso_path = utils.normpath(kwargs[key])
                num_paths += 1
            elif key == 'rr_path' and kwargs[key] is not None:
                rr_path = utils.normpath(kwargs[key])
                num_paths += 1
            elif key == 'joliet_path' and kwargs[key] is not None:
                joliet_path = utils.normpath(kwargs[key])
                num_paths += 1
            elif key == 'udf_path' and kwargs[key] is not None:
                udf_path = utils.normpath(kwargs[key])
                num_paths += 1
            else:
                raise pycdlibexception.PyCdlibInvalidInput('Unknown keyword %s' % (key))

        if num_paths != 1:
            raise pycdlibexception.PyCdlibInvalidInput("Exactly one of 'iso_path', 'rr_path', 'joliet_path', or 'udf_path' must be passed")

        if udf_path is not None:
            self._udf_get_file_from_iso_fp(outfp, blocksize, udf_path)
        else:
            self._get_file_from_iso_fp(outfp, blocksize, iso_path, rr_path, joliet_path)