This is a lazily loaded dictionary containing the launchd runtime
        information of the job in question. Internally, this is retrieved
        using ServiceManagement.SMJobCopyDictionary(). Keep in mind that
        some dictionary keys are not always present (for example 'PID').
        If the job specified by the label cannot be found in launchd, then
        this method raises a ValueError exception.

def properties(self):
        '''
        This is a lazily loaded dictionary containing the launchd runtime
        information of the job in question. Internally, this is retrieved
        using ServiceManagement.SMJobCopyDictionary(). Keep in mind that
        some dictionary keys are not always present (for example 'PID').
        If the job specified by the label cannot be found in launchd, then
        this method raises a ValueError exception.
        '''
        if hasattr(self, '_nsproperties'):
            self._properties = convert_NSDictionary_to_dict(self._nsproperties)
            del self._nsproperties
            #self._nsproperties = None
        if self._properties is None:
            self.refresh()
        return self._properties