Source code for py_trees.utilities

#!/usr/bin/env python
#
# License: BSD
#   https://raw.githubusercontent.com/stonier/py_trees/devel/LICENSE
#
##############################################################################
# Documentation
##############################################################################

"""
Assorted utility functions.
"""

##############################################################################
# Imports
##############################################################################

import os

##############################################################################
# System OS Tools
##############################################################################


[docs]def which(program): ''' Wrapper around the command line 'which' program. Args: program (:obj:`str`): name of the program to find. Returns: :obj:`str`: path to the program or None if it doesnt exist. ''' def is_exe(fpath): return os.path.isfile(fpath) and os.access(fpath, os.X_OK) fpath, unused_fname = os.path.split(program) if fpath: if is_exe(program): return program else: for path in os.environ["PATH"].split(os.pathsep): path = path.strip('"') exe_file = os.path.join(path, program) if is_exe(exe_file): return exe_file return None
############################################################################## # Python Helpers ##############################################################################
[docs]def static_variables(**kwargs): """ This is a decorator that can be used with python methods to attach initialised static variables to the method. .. code-block:: python @static_variables(counter=0) def foo(): foo.counter += 1 print("Counter: {}".format(foo.counter)) """ def decorate(func): for k in kwargs: setattr(func, k, kwargs[k]) return func return decorate