跳转到主要内容

Kids shell命令调用包装器

项目描述

Latest PyPI version Travis CI build status Test coverage

kids.sh 是一个Python库,提供了通过python调用shell命令时的辅助工具。它是“Kids”(代表“保持简单”)库的一部分。

成熟度

这是一个Alpha版本。更像是一个存储常见库的地方。也许将来会变成更一致的东西。

目前,这是一个非常谦逊的包。

功能

使用 kids.sh

  • 当你想要调用系统命令而不需要烦恼subprocess和其他东西时,请调用 wrap()。你将获得命令的标准输出作为返回字符串。

这些假设在代码中

  • 你不想处理精确的subprocess问题,也不太关心安全性(因为启动的系统命令是硬编码的)。

  • 你不需要异步代码。

安装

由于 kids.sh 在PyPI上可用,因此你不需要下载代码的GIT版本。因此,你应该能够运行

pip install kids.sh

如果你已下载了GIT源代码,则可以通过传统方式添加安装当前版本

python setup.py install

如果你没有GIT源代码,但想从github获取最新master或分支,你也可以

pip install git+https://github.com/0k/kids.sh

或者甚至选择特定的修订版(分支/标签/提交)

pip install git+https://github.com/0k/kids.sh@master

使用方法

更多文档可在代码中找到。

wrap

如果命令没有失败,则返回标准输出

>>> from __future__ import print_function

>>> from kids.sh import wrap
>>> print(wrap('test "$HELLO" && echo "foo" || echo "bar"'))
bar

但如果命令失败,则抛出一个特殊的 ShellError 异常

>>> wrap('test "$HELLO" && echo "foo" || { echo "bar" ; false ; }')
Traceback (most recent call last):
...
ShellError: Wrapped command returned with unexpected errorlevel.
  command: 'test "$HELLO" && echo "foo" || { echo "bar" ; false ; }'
  errlvl: 1
  stdout:
  | bar

如果您提供的是字符串列表而不是字符串,则不会使用 shell 来解释您的命令:进程和参数将直接发送到系统

>>> wrap(["/bin/cat", "/tmp/should-not-exist-file-xxxx"])
Traceback (most recent call last):
...
ShellError: Wrapped command returned with unexpected errorlevel.
  command: ['/bin/cat', '/should-not-exist-file-xxxx']
  errlvl: 1
  stderr:
  | /bin/cat: /tmp/should-not-exist-file-xxxx: No such file or directory

注意:

  • 命令 wrap(..) 会移除输出(从输出的开始和结束处移除空白符和换行符)。如果您不希望这样,可以提供 strip=False

    >>> from kids.sh import wrap
    >>> print("[%s]" % wrap('echo "  foo   "'))
    [foo]
    >>> print("[%s]" % wrap('echo "  foo   "', strip=False))
    [  foo   ]
    
  • wrap(..) 在处理多行内容时也支持良好的异常信息(通常用于 shell 脚本)

    >>> from kids.sh import wrap
    >>> print(wrap('''
    ...    if [ "bar" ]; then
    ...       echo "foo"
    ...       exit 3
    ...    else
    ...       exit 4
    ...    fi
    ... '''))
    Traceback (most recent call last):
    ...
    ShellError: Wrapped command returned with unexpected errorlevel.
      command:
      |
      |    if [ "bar" ]; then
      |       echo "foo"
      |       exit 3
      |    else
      |       exit 4
      |    fi
      |
      errlvl: 3
      stdout:
      | foo

cmd

如果您想要从命令中获取所有信息,可以使用 cmd

>>> from kids.sh import cmd

>>> cmd('test "$HELLO" && echo "foo" || { echo "bar" ; false ; }')
ShellOutput(out=...'bar\n', err=...'', errlvl=1)

因此,请注意它不会抛出任何异常,而是输出一个命名元组。

cmd(..) 也支持处理参数列表而不是命令字符串,如果您想绕过 shell 解释

>>> cmd(['/bin/cat', '/file-does-not-exist-xxxx'])
ShellOutput(out=...'', err=...'...', errlvl=1)

贡献

欢迎任何建议或问题。非常欢迎推送请求,请查看指南。

推送请求指南

您可以发送任何代码。我会查看它,并自己将其集成到代码库中,并将您作为作者。这个过程可能需要时间,如果您遵循以下指南,则会更快:

  • 使用 PEP8 或 pylint 检查您的代码。尽量保持 80 列宽。

  • 按照最小的关注点分离您的提交。

  • 每次提交都应该通过测试(以便进行简单的二分查找)

  • 每次功能/错误修复提交都应该包含代码、测试和文档。

  • 欢迎对排版或代码外观进行小的修改的提交。这些应该在其提交摘要中标上 !minor

  • 提交信息应遵循 gitchangelog 规则(检查 git 日志以获取示例)

  • 如果提交修复了问题或完成了功能的实现,请将其在摘要中提及。

如果您对指南有疑问,这里没有回答,请查看当前的 git log,您可能会找到以前提交的示例,说明如何处理您的问题。

许可证

版权所有 (c) 2018 Valentin Lab。

BSD 许可证 下发布。

变更日志

0.0.8 (2018-04-09)

更改

  • 移除 swrap(..),改为使用 wrap(..)strip=True 关键字参数。[Valentin Lab]

0.0.7 (2018-04-09)

新增

  • wrapswrapcmd 提供参数列表可以绕过 shell。[Valentin Lab]

  • 关于 wrap(..)swrap(..) 的更多文档。[Valentin Lab]

修复

  • 修复了拼写错误。[Valentin Lab]

0.0.6 (2015-03-12)

新增

  • ShellError 处理失败 shell 命令调用的完整输出。[Valentin Lab]

修复

  • [sh] set_env 不会正确设置环境变量。[Valentin Lab]

0.0.5 (2015-02-06)

修复

  • 重构以避免使用包 .tests。[Valentin Lab]

0.0.2 (2015-02-06)

新增

  • 添加了 cmd 命令的文档。[Valentin Lab]

  • 提供测试设施。[Valentin Lab]

    • 引入 set_env

    • unittest 基类 BaseShTest

    • 使用 namedtuple 从 cmd 中获取元组

0.0.1 (2014-05-13)

  • 第一次导入。[Valentin Lab]

项目详情


下载文件

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

源代码发行版

kids.sh-0.0.8.tar.gz (8.6 kB 查看哈希值)

上传时间 源代码

构建发行版

kids.sh-0.0.8-py2.py3-none-any.whl (12.0 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持