def set(self, cpus, mems): if isiterable(cpus): cpus = list_to_ranges(cpus) if isiterable(mems): mems = list_to_ranges(mems) self.target.write_value(self.cpus_file, cpus) self.target.write_value(self.mems_file, mems)
def invoke(self, binary, args=None, in_directory=None, on_cpus=None, as_root=False, timeout=30): """ Executes the specified binary under the specified conditions. :binary: binary to execute. Must be present and executable on the device. :args: arguments to be passed to the binary. The can be either a list or a string. :in_directory: execute the binary in the specified directory. This must be an absolute path. :on_cpus: taskset the binary to these CPUs. This may be a single ``int`` (in which case, it will be interpreted as the mask), a list of ``ints``, in which case this will be interpreted as the list of cpus, or string, which will be interpreted as a comma-separated list of cpu ranges, e.g. ``"0,4-7"``. :as_root: Specify whether the command should be run as root :timeout: If the invocation does not terminate within this number of seconds, a ``TimeoutError`` exception will be raised. Set to ``None`` if the invocation should not timeout. """ command = binary if args: if isiterable(args): args = ' '.join(args) command = '{} {}'.format(command, args) if on_cpus: on_cpus = bitmask(on_cpus) command = '{} taskset 0x{:x} {}'.format(self.busybox, on_cpus, command) if in_directory: command = 'cd {} && {}'.format(in_directory, command) return self.execute(command, as_root=as_root, timeout=timeout)
def bitmask(value): if isinstance(value, basestring): value = ranges_to_list(value) if isiterable(value): value = list_to_mask(value) if not isinstance(value, int): raise ValueError(value) return value
def categorize(v): if hasattr(v, 'merge_with') and hasattr(v, 'merge_into'): return 'o' elif hasattr(v, 'items'): return 'm' elif isiterable(v): return 's' elif v is None: return 'n' else: return 'c'
def set(self, **attrs): for idx in attrs: if isiterable(attrs[idx]): attrs[idx] = list_to_ranges(attrs[idx]) # Build attribute path path = '{}.{}'.format(self.controller.kind, idx) path = self.target.path.join(self.directory, path) self.logger.debug('Set attribute [%s] to: %s"', path, attrs[idx]) # Set the attribute value self.target.write_value(path, attrs[idx])
def set(self, **attrs): for idx in attrs: if isiterable(attrs[idx]): attrs[idx] = list_to_ranges(attrs[idx]) # Build attribute path if self.controller._noprefix: attr_name = '{}'.format(idx) else: attr_name = '{}.{}'.format(self.controller.kind, idx) path = self.target.path.join(self.directory, attr_name) self.logger.debug('Set attribute [%s] to: %s"', path, attrs[idx]) # Set the attribute value try: self.target.write_value(path, attrs[idx]) except TargetError: # Check if the error is due to a non-existing attribute attrs = self.get() if idx not in attrs: raise ValueError('Controller [{}] does not provide attribute [{}]'\ .format(self.controller.kind, attr_name)) raise
def set(self, **attrs): for idx in attrs: if isiterable(attrs[idx]): attrs[idx] = list_to_ranges(attrs[idx]) # Build attribute path if self.controller._noprefix: attr_name = "{}".format(idx) else: attr_name = "{}.{}".format(self.controller.kind, idx) path = self.target.path.join(self.directory, attr_name) self.logger.debug('Set attribute [%s] to: %s"', path, attrs[idx]) # Set the attribute value try: self.target.write_value(path, attrs[idx]) except TargetError: # Check if the error is due to a non-existing attribute attrs = self.get() if idx not in attrs: raise ValueError( "Controller [{}] does not provide attribute [{}]".format(self.controller.kind, attr_name) ) raise