'Execute command on the FlashSystem and parse attributes.
Exception is raised if the information from the system
can not be obtained.'

def _execute_command_and_parse_attributes(self, ssh_cmd):

    LOG.debug('enter:    _execute_command_and_parse_attributes:    command:    %s.', six.text_type(ssh_cmd))
    try:
        (out, err) = self._ssh(ssh_cmd)
    except processutils.ProcessExecutionError:
        LOG.warning('Failed    to    run    command:    %s.', ssh_cmd)
        return None
    self._assert_ssh_return(out, '_execute_command_and_parse_attributes', ssh_cmd, out, err)
    attributes = {}
    for attrib_line in out.split('\n'):
        (attrib_name, foo, attrib_value) = attrib_line.partition('!')
        if ((attrib_name is not None) and attrib_name.strip()):
            self._append_dict(attributes, attrib_name, attrib_value)
    LOG.debug('leave:    _execute_command_and_parse_attributes:    command:    %(cmd)s    attributes:    %(attr)s.', {'cmd': six.text_type(ssh_cmd), 'attr': six.text_type(attributes)})
    return attributes
