Python shutil.which() Examples
The following are 30
code examples of shutil.which().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
shutil
, or try the search function
.
Example #1
Source File: ssm.py From aegea with Apache License 2.0 | 10 votes |
def ensure_session_manager_plugin(): session_manager_dir = os.path.join(config.user_config_dir, "bin") PATH = os.environ.get("PATH", "") + ":" + session_manager_dir if shutil.which("session-manager-plugin", path=PATH): subprocess.check_call(["session-manager-plugin"], env=dict(os.environ, PATH=PATH)) else: os.makedirs(session_manager_dir, exist_ok=True) target_path = os.path.join(session_manager_dir, "session-manager-plugin") if platform.system() == "Darwin": download_session_manager_plugin_macos(target_path=target_path) elif platform.linux_distribution()[0] == "Ubuntu": download_session_manager_plugin_linux(target_path=target_path) else: download_session_manager_plugin_linux(target_path=target_path, pkg_format="rpm") os.chmod(target_path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR) subprocess.check_call(["session-manager-plugin"], env=dict(os.environ, PATH=PATH)) return shutil.which("session-manager-plugin", path=PATH)
Example #2
Source File: pdbpp.py From pdbpp with BSD 3-Clause "New" or "Revised" License | 6 votes |
def set_trace(self, frame=None): """Remember starting frame. This is used with pytest, which does not use pdb.set_trace(). """ if getattr(local, "_pdbpp_completing", False): # Handle set_trace being called during completion, e.g. with # fancycompleter's attr_matches. return if self.disabled: return if frame is None: frame = sys._getframe().f_back self._via_set_trace_frame = frame self._stopped_for_set_trace = False self.start_filename = frame.f_code.co_filename self.start_lineno = frame.f_lineno return super(Pdb, self).set_trace(frame)
Example #3
Source File: epr.py From epr with MIT License | 6 votes |
def find_media_viewer(): global VWR VWR_LIST = [ "feh", "gio", "sxiv", "gnome-open", "gvfs-open", "xdg-open", "kde-open", "firefox" ] if sys.platform == "win32": VWR = ["start"] elif sys.platform == "darwin": VWR = ["open"] else: for i in VWR_LIST: if shutil.which(i) is not None: VWR = [i] break if VWR[0] in {"gio"}: VWR.append("open")
Example #4
Source File: util.py From renpy-shader with MIT License | 6 votes |
def _get_soname(f): # assuming GNU binutils / ELF if not f: return None objdump = shutil.which('objdump') if not objdump: # objdump is not available, give up return None try: proc = subprocess.Popen((objdump, '-p', '-j', '.dynamic', f), stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) except OSError: # E.g. bad executable return None with proc: dump = proc.stdout.read() res = re.search(br'\sSONAME\s+([^\s]+)', dump) if not res: return None return os.fsdecode(res.group(1))
Example #5
Source File: patches.py From ungoogled-chromium with BSD 3-Clause "New" or "Revised" License | 6 votes |
def _apply_callback(args, parser_error): logger = get_logger() patch_bin_path = None if args.patch_bin is not None: patch_bin_path = Path(args.patch_bin) if not patch_bin_path.exists(): patch_bin_path = shutil.which(args.patch_bin) if patch_bin_path: patch_bin_path = Path(patch_bin_path) else: parser_error( f'--patch-bin "{args.patch_bin}" is not a command or path to executable.') for patch_dir in args.patches: logger.info('Applying patches from %s', patch_dir) apply_patches( generate_patches_from_series(patch_dir, resolve=True), args.target, patch_bin_path=patch_bin_path)
Example #6
Source File: pdbpp.py From pdbpp with BSD 3-Clause "New" or "Revised" License | 6 votes |
def _get_editor_cmd(self, filename, lineno): editor = self.config.editor if editor is None: try: editor = os.environ["EDITOR"] except KeyError: try: from shutil import which except ImportError: from distutils.spawn import find_executable as which editor = which("vim") if editor is None: editor = which("vi") if not editor: raise RuntimeError("Could not detect editor. Configure it or set $EDITOR.") # noqa: E501 return self._format_editcmd(editor, filename, lineno)
Example #7
Source File: core_library.py From toonapilib with MIT License | 6 votes |
def get_binary_path(executable, logging_level='INFO'): """Gets the software name and returns the path of the binary.""" if sys.platform == 'win32': if executable == 'start': return executable executable = executable + '.exe' if executable in os.listdir('.'): binary = os.path.join(os.getcwd(), executable) else: binary = next((os.path.join(path, executable) for path in os.environ['PATH'].split(os.pathsep) if os.path.isfile(os.path.join(path, executable))), None) else: venv_parent = get_venv_parent_path() venv_bin_path = os.path.join(venv_parent, '.venv', 'bin') if not venv_bin_path in os.environ.get('PATH'): if logging_level == 'DEBUG': print(f'Adding path {venv_bin_path} to environment PATH variable') os.environ['PATH'] = os.pathsep.join([os.environ['PATH'], venv_bin_path]) binary = shutil.which(executable) return binary if binary else None
Example #8
Source File: pdbpp.py From pdbpp with BSD 3-Clause "New" or "Revised" License | 6 votes |
def do_track(self, arg): """ track expression Display a graph showing which objects are referred by the value of the expression. This command requires pypy to be in the current PYTHONPATH. """ try: from rpython.translator.tool.reftracker import track except ImportError: print('** cannot import pypy.translator.tool.reftracker **', file=self.stdout) return try: val = self._getval(arg) except: pass else: track(val)
Example #9
Source File: interop.py From rift-python with Apache License 2.0 | 6 votes |
def check_juniper_rift_in_path(): if shutil.which("rift-environ") is None: fatal_error("Cannot find Juniper RIFT (rift-environ) in PATH") # run it and check version output = subprocess.check_output(["rift-environ", "--version"], universal_newlines=True) # print (output) regex = re.compile(r"^.hrift encoding schema: *(\d+)\.(\d+).*", re.IGNORECASE | re.MULTILINE) major = re.search(regex, output) if not major or not major.group(1): fatal_error("Cannot detect major version of Juniper RIFT") minor = major.group(2) major = major.group(1) expected_minor = protocol_minor_version expected_major = protocol_major_version if int(major) != expected_major or int(minor) != expected_minor: fatal_error("Wrong Major/Minor version of Juniper RIFT: (expected {}.{}, got {}.{})" .format(expected_major, expected_minor, major, minor))
Example #10
Source File: pdbpp.py From pdbpp with BSD 3-Clause "New" or "Revised" License | 6 votes |
def _disable_pytest_capture_maybe(self): try: import py.test # Force raising of ImportError if pytest is not installed. py.test.config except (ImportError, AttributeError): return try: capman = py.test.config.pluginmanager.getplugin('capturemanager') capman.suspendcapture() except KeyError: pass except AttributeError: # Newer pytest with support ready, or very old py.test for which # this hack does not work. pass
Example #11
Source File: pdbpp.py From pdbpp with BSD 3-Clause "New" or "Revised" License | 6 votes |
def setbgcolor(line, color): # hack hack hack # add a bgcolor attribute to all escape sequences found import re setbg = '\x1b[%sm' % color regexbg = '\\1;%sm' % color result = setbg + re.sub('(\x1b\\[.*?)m', regexbg, line) + '\x1b[00m' if os.environ.get('TERM') == 'eterm-color': # it seems that emacs' terminal has problems with some ANSI escape # sequences. Eg, 'ESC[44m' sets the background color in all terminals # I tried, but not in emacs. To set the background color, it needs to # have also an explicit foreground color, e.g. 'ESC[37;44m'. These # three lines are a hack, they try to add a foreground color to all # escape sequences which are not recognized by emacs. However, we need # to pick one specific fg color: I choose white (==37), but you might # want to change it. These lines seems to work fine with the ANSI # codes produced by pygments, but they are surely not a general # solution. result = result.replace(setbg, '\x1b[37;%dm' % color) result = result.replace('\x1b[00;%dm' % color, '\x1b[37;%dm' % color) result = result.replace('\x1b[39;49;00;', '\x1b[37;') return result
Example #12
Source File: pdbpp.py From pdbpp with BSD 3-Clause "New" or "Revised" License | 6 votes |
def _install_linecache_wrapper(self): """Disable linecache.checkcache to not invalidate caches. This gets installed permanently to also bypass e.g. pytest using `inspect.getsource`, which would invalidate it outside of the interaction them. """ if not hasattr(self, "_orig_linecache_checkcache"): import linecache # Save it, although not used really (can be useful for debugging). self._orig_linecache_checkcache = linecache.checkcache def _linecache_checkcache(*args, **kwargs): return linecache.checkcache = _linecache_checkcache
Example #13
Source File: common.py From datasette with Apache License 2.0 | 6 votes |
def fail_if_publish_binary_not_installed(binary, publish_target, install_link): """Exit (with error message) if ``binary` isn't installed""" if not shutil.which(binary): click.secho( "Publishing to {publish_target} requires {binary} to be installed and configured".format( publish_target=publish_target, binary=binary ), bg="red", fg="white", bold=True, err=True, ) click.echo( "Follow the instructions at {install_link}".format( install_link=install_link ), err=True, ) sys.exit(1)
Example #14
Source File: tool.py From Obfuscapk with MIT License | 6 votes |
def __init__(self): self.logger = logging.getLogger( "{0}.{1}".format(__name__, self.__class__.__name__) ) if "ZIPALIGN_PATH" in os.environ: self.zipalign_path: str = os.environ["ZIPALIGN_PATH"] else: self.zipalign_path: str = "zipalign" full_zipalign_path = shutil.which(self.zipalign_path) # Make sure to use the full path of the executable (needed for cross-platform # compatibility). if full_zipalign_path is None: raise RuntimeError( 'Something is wrong with executable "{0}"'.format(self.zipalign_path) ) else: self.zipalign_path = full_zipalign_path
Example #15
Source File: tool.py From Obfuscapk with MIT License | 6 votes |
def __init__(self): self.logger = logging.getLogger( "{0}.{1}".format(__name__, self.__class__.__name__) ) if "JARSIGNER_PATH" in os.environ: self.jarsigner_path: str = os.environ["JARSIGNER_PATH"] else: self.jarsigner_path: str = "jarsigner" full_jarsigner_path = shutil.which(self.jarsigner_path) # Make sure to use the full path of the executable (needed for cross-platform # compatibility). if full_jarsigner_path is None: raise RuntimeError( 'Something is wrong with executable "{0}"'.format(self.jarsigner_path) ) else: self.jarsigner_path = full_jarsigner_path
Example #16
Source File: common.py From typhon with MIT License | 6 votes |
def reraise_with_stack(func): """Make functions include the whole stack in raised exceptions Notes: This is a decorator function. When using the concurrent.futures module, the original traceback message gets lost, which makes it difficult to debug. This decorator solves the problem. References: Taken from https://stackoverflow.com/a/29357032. """ @functools.wraps(func) def wrapped(*args, **kwargs): try: return func(*args, **kwargs) except Exception as e: traceback_str = traceback.format_exc() raise Exception( "Error occurred. Original traceback is\n%s\n" % traceback_str ) return wrapped
Example #17
Source File: tool.py From Obfuscapk with MIT License | 6 votes |
def __init__(self): self.logger = logging.getLogger( "{0}.{1}".format(__name__, self.__class__.__name__) ) if "APKTOOL_PATH" in os.environ: self.apktool_path: str = os.environ["APKTOOL_PATH"] else: self.apktool_path: str = "apktool" full_apktool_path = shutil.which(self.apktool_path) # Make sure to use the full path of the executable (needed for cross-platform # compatibility). if full_apktool_path is None: raise RuntimeError( 'Something is wrong with executable "{0}"'.format(self.apktool_path) ) else: self.apktool_path = full_apktool_path
Example #18
Source File: lldb.py From debugger with MIT License | 5 votes |
def exec(self, path, args=[], **kwargs): if not os.access(path, os.X_OK): raise DebugAdapter.NotExecutableError(path) if subprocess.call(["DevToolsSecurity"]) != 0: raise DebugAdapter.PermissionDeniedError('lldb') # resolve path to debugserver path_debugserver = shutil.which('debugserver') if not path_debugserver: path_debugserver = '/Library/Developer/CommandLineTools/Library/' + \ 'PrivateFrameworks/LLDB.framework/Versions/A/Resources/debugserver' if not os.path.exists(path_debugserver): raise DebugAdapter.NotInstalledError('lldb') # get available port port = gdblike.get_available_port() if port == None: raise Exception('no available ports') # invoke debugserver try: if kwargs.get('terminal', False): dbg_args = [path_debugserver] dbg_args.extend(['--stdio-path', '/dev/stdin']) dbg_args.extend(['--stdout-path', '/dev/stdout']) dbg_args.extend(['--stderr-path', '/dev/stderr']) dbg_args.extend(['localhost:%d'%port, shlex.quote(path), '--']) dbg_args.extend([shlex.quote(arg) for arg in args]) DebugAdapter.new_terminal(' '.join(dbg_args)) else: dbg_args = [path_debugserver, 'localhost:%d'%port, path, '--'] dbg_args.extend(args) subprocess.Popen(dbg_args, stdin=None, stdout=None, stderr=None, preexec_fn=gdblike.preexec) except Exception: raise Exception('invoking debugserver (used path: %s)' % path_debugserver) self.target_path_ = path self.connect('localhost', port)
Example #19
Source File: pdbpp.py From pdbpp with BSD 3-Clause "New" or "Revised" License | 5 votes |
def import_from_stdlib(name): import code # arbitrary module which stays in the same dir as pdb result = types.ModuleType(name) stdlibdir, _ = os.path.split(code.__file__) pyfile = os.path.join(stdlibdir, name + '.py') with open(pyfile) as f: src = f.read() co_module = compile(src, pyfile, 'exec', dont_inherit=True) exec(co_module, result.__dict__) return result
Example #20
Source File: core.py From lm-human-preferences with MIT License | 5 votes |
def _our_gpu(): """Figure out which GPU we should be using in an MPI context.""" gpus = gpu_devices() if not gpus: return None rank = MPI.COMM_WORLD.Get_rank() local_rank, local_size = get_local_rank_size(MPI.COMM_WORLD) if gpu_count() not in (0, local_size): raise ValueError('Expected one GPU per rank, got gpus %s, local size %d' % (gpus, local_size)) gpu = gpus[local_rank] print('rank %d: gpus = %s, our gpu = %d' % (rank, gpus, gpu)) return gpu
Example #21
Source File: core.py From lm-human-preferences with MIT License | 5 votes |
def nvidia_gpu_count(): """ Count the GPUs on this machine. """ if shutil.which('nvidia-smi') is None: return 0 try: output = subprocess.check_output(['nvidia-smi', '--query-gpu=gpu_name', '--format=csv']) except subprocess.CalledProcessError: # Probably no GPUs / no driver running. return 0 return max(0, len(output.split(b'\n')) - 2)
Example #22
Source File: utils.py From resolwe with Apache License 2.0 | 5 votes |
def with_resolwe_host(wrapped_method, instance, args, kwargs): """Decorate unit test to give it access to a live Resolwe host. Set ``RESOLWE_HOST_URL`` setting to the address where the testing live Resolwe host listens to. .. note:: This decorator must be used with a (sub)class of :class:`~django.test.LiveServerTestCase` which starts a live Django server in the background. """ from resolwe.flow.managers import manager # To prevent circular imports. if not hasattr(instance, "server_thread"): raise AttributeError( "with_resolwe_host decorator must be used with a " "(sub)class of LiveServerTestCase that has the " "'server_thread' attribute" ) host = instance.server_thread.host if platform not in ["linux", "linux2"]: host = "host.docker.internal" resolwe_host_url = "http://{host}:{port}".format( host=host, port=instance.server_thread.port ) with override_settings(RESOLWE_HOST_URL=resolwe_host_url): with manager.override_settings(RESOLWE_HOST_URL=resolwe_host_url): # Run the actual unit test method. return with_custom_executor(NETWORK="host")(wrapped_method)(*args, **kwargs)
Example #23
Source File: utils.py From resolwe with Apache License 2.0 | 5 votes |
def with_custom_executor(wrapped=None, **custom_executor_settings): """Decorate unit test to run processes with a custom executor. :param dict custom_executor_settings: custom ``FLOW_EXECUTOR`` settings with which you wish to override the current settings """ if wrapped is None: return functools.partial(with_custom_executor, **custom_executor_settings) @wrapt.decorator def wrapper(wrapped_method, instance, args, kwargs): from resolwe.flow.managers import manager # To prevent circular imports. executor_settings = settings.FLOW_EXECUTOR.copy() executor_settings.update(custom_executor_settings) try: with override_settings(FLOW_EXECUTOR=executor_settings): with manager.override_settings(FLOW_EXECUTOR=executor_settings): # Re-run engine discovery as the settings have changed. manager.discover_engines() # Re-run the post_register_hook manager.get_executor().post_register_hook(verbosity=0) # Run the actual unit test method. return wrapped_method(*args, **kwargs) finally: # Re-run engine discovery as the settings have changed. manager.discover_engines() return wrapper(wrapped)
Example #24
Source File: utils.py From resolwe with Apache License 2.0 | 5 votes |
def check_installed(command): """Check if the given command is installed. :param str command: name of the command :return: (indicator of the availability of the command, message saying command is not available) :rtype: tuple(bool, str) """ if shutil.which(command): return True, "" else: return False, "Command '{}' is not found.".format(command)
Example #25
Source File: compat.py From jbox with MIT License | 5 votes |
def valid_ident(s): m = IDENTIFIER.match(s) if not m: raise ValueError('Not a valid Python identifier: %r' % s) return True # The ConvertingXXX classes are wrappers around standard Python containers, # and they serve to convert any suitable values in the container. The # conversion converts base dicts, lists and tuples to their wrapped # equivalents, whereas strings which match a conversion format are converted # appropriately. # # Each wrapper should have a configurator attribute holding the actual # configurator to use for conversion.
Example #26
Source File: compat.py From jbox with MIT License | 5 votes |
def fromkeys(cls, iterable, value=None): '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S and values equal to v (which defaults to None). ''' d = cls() for key in iterable: d[key] = value return d
Example #27
Source File: compat.py From jbox with MIT License | 5 votes |
def __delitem__(self, key, dict_delitem=dict.__delitem__): 'od.__delitem__(y) <==> del od[y]' # Deleting an existing item uses self.__map to find the link which is # then removed by updating the links in the predecessor and successor nodes. dict_delitem(self, key) link_prev, link_next, key = self.__map.pop(key) link_prev[1] = link_next link_next[0] = link_prev
Example #28
Source File: compat.py From jbox with MIT License | 5 votes |
def __setitem__(self, key, value, dict_setitem=dict.__setitem__): 'od.__setitem__(i, y) <==> od[i]=y' # Setting a new item creates a new link which goes at the end of the linked # list, and the inherited dictionary is updated with the new key/value pair. if key not in self: root = self.__root last = root[0] last[1] = root[0] = self.__map[key] = [last, root, key] dict_setitem(self, key, value)
Example #29
Source File: util.py From anime-downloader with The Unlicense | 5 votes |
def check_in_path(app): """ Checks to see if the given app exists on the path :param app: app name to look for :return: true if the app exists, false otherwise """ return shutil.which(app) is not None
Example #30
Source File: test_flask.py From eventsourcing with BSD 3-Clause "New" or "Revised" License | 5 votes |
def start_app(self): # Make up a DB URI using a named temporary file. self.tempfile = NamedTemporaryFile() uri = "sqlite:///{}".format(self.tempfile.name) from eventsourcing.example.interface.flaskapp import IntegerSequencedItem # Close application, importing the module constructed # the application, which will leave event handlers subscribed. close_example_application() # Setup tables. datastore = SQLAlchemyDatastore( settings=SQLAlchemySettings(uri=uri), tables=(IntegerSequencedItem,) ) datastore.setup_connection() datastore.setup_tables() datastore.close_connection() # Run uwsgi. path_to_uwsgi = shutil.which("uwsgi") if not os.path.exists(path_to_uwsgi): raise AssertionError("Can't find uwsgi: %s" % path_to_uwsgi) cmd = [path_to_uwsgi] if path_to_virtualenv is not None: cmd += ["-H", path_to_virtualenv] cmd += ["--master"] cmd += ["--processes", "4"] cmd += ["--threads", "2"] cmd += ["--wsgi-file", path_to_flaskapp] cmd += ["--http", ":{}".format(self.port)] pythonpath = ":".join( os.getenv("PYTHONPATH", "").split(":") + [path_to_eventsourcing] ) return Popen(cmd, env={"PYTHONPATH": pythonpath, "DB_URI": uri})