探测周围外壳的工具

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第三方库


热门话题
安卓 studio安装的java Unity本机广告   java如何将映射转换为对象   java我试图使用rest控制器从h2数据库中检索记录,但它说没有数据集   反思为什么会抛出java。lang.InstanceException?   在opensuse中找不到Java/javac   java为Android上的谷歌地图添加了5900多个标记。如何有效地做   java如何在if语句中使用循环   java如何在JPA(Hibernate)中映射一对多关系和复合主键?   如何在Java中读取和写入外部进程?   Java线程。睡眠时间最短   java使用EclipseGradle插件如何离线托管和使用依赖项(库jar文件)   java为什么虚拟引用在排队时没有被清除?   java无法理解如何创建用于响铃报警的取消按钮   java解析不应通过注入容器错误发生   java Toast或ProgressDialog不显示   java在自定义对象上使用优先级队列的更好方法   java格式的。wmv文件。(或者任何视频文件都很好)   从页面调用另一个侦听器后,不会调用java JSF<f:ajax>侦听器   java注释ConfigApplicationContext不能多次刷新有什么原因吗?