Kids shell命令调用包装器
项目描述
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)
新增
为 wrap、swrap 和 cmd 提供参数列表可以绕过 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]
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。