跳转到主要内容

检测周围Shell的工具

项目描述

https://img.shields.io/pypi/v/shellingham.svg

Shellingham检测当前Python可执行文件运行的Shell。

用法

>>> import shellingham
>>> shellingham.detect_shell()
('bash', '/bin/bash')

detect_shell通过探索进程的运行环境来确定它在哪个Shell中运行。它返回一个2元组

  • Shell名称,总是小写。

  • 运行Shell的命令。

如果detect_shell无法检测到周围的Shell,将引发ShellDetectionFailure

注意

  • Shell名称始终是小写。

  • 在Windows上,Shell名称是可执行文件名称,不包括文件扩展名。

应用开发者注意事项

记住,您的应用程序的用户不一定使用shell。如果无法检测到shell,Shellingham会引发ShellDetectionFailure,但您的应用程序几乎不应这样做来影响用户

解决这个问题的实际方法是使用try块包装detect_shell,并在失败时提供合理的默认值。

try:
    shell = shellingham.detect_shell()
except shellingham.ShellDetectionFailure:
    shell = provide_default()

您有几个选择可供选择。

  • POSIX标准强制要求环境变量SHELL指向“用户的首选命令语言解释器”。这始终可用(即使用户不在交互会话中),并且可能是启动交互式子shell的正确选择。

  • 命令sh几乎可以肯定存在,可能位于/bin/sh,因为许多POSIX工具依赖于它。如果您想运行一个(可能是非交互式的)脚本,这应该是合适的。

  • 所有版本的DOS和Windows都有一个环境变量COMSPEC。这始终可以用来启动一个可用的命令提示符(例如Windows上的cmd.exe)。

以下是提供一个默认shell的简单实现。

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')

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

shellingham-1.5.4.tar.gz (10.3 kB 查看散列值)

上传时间

构建分布

shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB 查看散列值)

上传时间 Python 2 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面