探测周围外壳的工具

shellingham的Python项目详细描述


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

shellingham检测当前python可执行文件运行的shell。

用法

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

detect_shell查看进程的运行环境以确定 它是什么外壳。它返回一个2元组:

  • 外壳名称,总是小写的。
  • 用于运行shell的命令。

^如果detect_shell未能检测到 周围的贝壳。

注释

  • shell名称总是小写的。
  • 在windows中,shell名称是可执行文件的名称,减去文件 埃克塞滕。
  • 当前该命令只包含windows上的可执行文件名,即使 命令由完整路径调用。这在未来可能会改变。

应用程序开发人员注意事项

记住,应用程序的用户不一定使用shell。 如果没有要检测的shell,shellingham将引发ShellDetectionFailure, 但是应用程序几乎不应该对用户这样做。

一种实用的方法是在try块中包装detect_shell,然后 失败时提供正常的默认值:

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

有几个选择供你选择。

  • posix标准要求环境变量SHELL引用 “用户首选的命令语言解释器”。这个随时都有 (即使用户不在交互会话中),并且很可能是正确的 用于启动交互式子shell的选项。
  • 命令{tt7}$几乎存在,可能在^ {tt8}$,因为 一些posix工具依赖于它。如果您想运行 (可能是非交互式的)脚本。
  • 所有版本的dos和windows都有一个环境变量COMSPEC。 这始终可用于启动可用的命令提示符(例如cmd.exeon 窗户)。

下面是一个提供默认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')

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java OnResizeListener或OnDrawListener或类似的东西   java Orika映射嵌套子列表   保存时java Heroku请求超时代码H12   数据库在Java中出现socket读取超时异常的原因是什么?   java如何更改来自Sqlite数据库的特定数据在Listview中的行颜色   java JAXB解组器无法正确处理XML中的列表   java Android日期时区让我抓狂   java不透明属性在Swing中如何工作?   eclipse从JavaEE代码生成流程图   java如何在Hibernate中从相关表中获取计数   java Glassfish部署了项目的依赖项库   java使内容适合JavaFx中的WebView   java不满意的链接错误libcrypto。所以1.0.0   循环中java数组的使用   java找出哪个包调用服务