| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- Metadata-Version: 2.1
- Name: shellingham
- Version: 1.5.4
- Summary: Tool to Detect Surrounding Shell
- Home-page: https://github.com/sarugaku/shellingham
- Author: Tzu-ping Chung
- Author-email: uranusjr@gmail.com
- License: ISC License
- Keywords: shell
- Classifier: Development Status :: 3 - Alpha
- Classifier: Environment :: Console
- Classifier: Intended Audience :: Developers
- Classifier: License :: OSI Approved :: ISC License (ISCL)
- Classifier: Operating System :: OS Independent
- Classifier: Programming Language :: Python :: 3 :: Only
- Classifier: Programming Language :: Python :: 3.7
- Classifier: Programming Language :: Python :: 3.8
- Classifier: Programming Language :: Python :: 3.9
- Classifier: Programming Language :: Python :: 3.10
- Classifier: Programming Language :: Python :: 3.11
- Classifier: Programming Language :: Python :: 3.12
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
- Requires-Python: >=3.7
- Description-Content-Type: text/x-rst
- License-File: LICENSE
- =============================================
- Shellingham: Tool to Detect Surrounding Shell
- =============================================
- .. image:: https://img.shields.io/pypi/v/shellingham.svg
- :target: https://pypi.org/project/shellingham/
- Shellingham detects what shell the current Python executable is running in.
- Usage
- =====
- .. code-block:: python
- >>> import shellingham
- >>> shellingham.detect_shell()
- ('bash', '/bin/bash')
- ``detect_shell`` pokes around the process's running environment to determine
- what shell it is run in. It returns a 2-tuple:
- * The shell name, always lowercased.
- * The command used to run the shell.
- ``ShellDetectionFailure`` is raised if ``detect_shell`` fails to detect the
- surrounding shell.
- Notes
- =====
- * The shell name is always lowercased.
- * On Windows, the shell name is the name of the executable, minus the file
- extension.
- Notes for Application Developers
- ================================
- Remember, your application's user is not necessarily using a shell.
- Shellingham raises ``ShellDetectionFailure`` if there is no shell to detect,
- but *your application should almost never do this to your user*.
- A practical approach to this is to wrap ``detect_shell`` in a try block, and
- provide a sane default on failure
- .. code-block:: python
- try:
- shell = shellingham.detect_shell()
- except shellingham.ShellDetectionFailure:
- shell = provide_default()
- There are a few choices for you to choose from.
- * The POSIX standard mandates the environment variable ``SHELL`` to refer to
- "the user's preferred command language interpreter". This is always available
- (even if the user is not in an interactive session), and likely the correct
- choice to launch an interactive sub-shell with.
- * A command ``sh`` is almost guaranteed to exist, likely at ``/bin/sh``, since
- several POSIX tools rely on it. This should be suitable if you want to run a
- (possibly non-interactive) script.
- * All versions of DOS and Windows have an environment variable ``COMSPEC``.
- This can always be used to launch a usable command prompt (e.g. `cmd.exe` on
- Windows).
- Here's a simple implementation to provide a default shell
- .. code-block:: python
- import os
- def provide_default():
- if os.name == 'posix':
- return os.environ['SHELL']
- elif os.name == 'nt':
- return os.environ['COMSPEC']
- raise NotImplementedError(f'OS {os.name!r} support not available')
|