高级系统脚本执行抽象层。
项目描述
xal 是一个Python库,它提供了一个用于与系统资源(文件、命令等)交互的 高级API,并通过第三方(stdlib、Fabric、Salt、...)进行 低级执行。
概念是在系统中打开一个会话,然后在该会话中运行命令
会话是特定的,它包含执行上下文,它知道低级实现。
命令使用通用API。您可以在另一个会话中运行相同的命令。
示例
让我们在本地系统上初始化一个会话
>>> import xal >>> local_session = xal.LocalSession()
在这个会话中,我们可以管理文件
>>> path = local_session.path('hello-xal.txt') >>> path.exists() False >>> written = path.open('w').write(u'Hello world!') >>> path.exists() True >>> print path.open().read() Hello world! >>> path.unlink() >>> path.exists() False
我们还可以执行sh命令
>>> result = local_session.sh.run(u"echo 'Goodbye!'") >>> print result.stdout Goodbye! <BLANKLINE>
现在让我们创建一个函数,它执行相同的操作。它将会话作为输入参数
>>> def hello(session): ... path = session.path('hello-xal.txt') ... path.open('w').write(u"Hello world!") ... print path.open().read() ... path.unlink() ... print session.sh.run(u"echo 'Goodbye!'").stdout
当然,我们可以在本地会话中运行它
>>> hello(local_session) Hello world! Goodbye! <BLANKLINE>
好处在于我们可以在另一个会话中重用相同的函数。让我们使用Fabric创建一个远程SSH会话...
>>> remote_session = xal.FabricSession(host='localhost')
...然后只需使用这个远程会话运行相同的函数
>>> hello(remote_session) Hello world! Goodbye! <BLANKLINE>
动机
xal 的想法是
Python用户(包括系统管理员和DevOps)有一个一致和统一的API来编写在系统上执行操作的脚本。
这些脚本是可以移植的,即它们可以在各种环境中执行。无论操作系统如何,无论连接和与系统通信的协议如何...
Python社区可以共享与Fabric、zc.buildout、Salt、Ansible等工具兼容的库。
从一种工具切换到另一种工具更容易:重新配置会话,不要更改脚本。在本地开发脚本,通过Fabric远程测试它们,使用Salt进行分发……或者反之。
项目状态
今天:xal是一个概念验证。它专注于基本功能的示例实现,如管理文件和目录,或执行sh命令。想法是,作为Python用户,您可以尝试一下,如果您喜欢它,就可以用它来完成简单的任务。
明天,根据社区反馈,xal可能会改进或被弃用。作为xal的作者,我希望以下事情发生
提高当前特性的稳定性和性能。
更多的执行上下文(即会话):Salt,作为sudoer的Fabric……
更多的资源:用户,系统软件包,……
更好的API,最好是作为PEP构建。就像
的概念验证试图模仿pathlib一样,可能每个资源都有一个相关的PEP。Sh命令(即subprocess的替代品)是一个史诗般的例子。
作为
提供反馈。您喜欢
吗?您在 中不喜欢什么?您的反馈很重要! 在GitHub上加入项目。
资源
项目详情
xal-0.3.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | a1f2d03ba4bdba7f44e43dfd4eb0a25abd8d813c3312d0939d543fb0b128d0e2 |
|
MD5 | 2e4b76c0db28cf5ba7a9e9ab7e0a23cc |
|
BLAKE2b-256 | 0a3d76e588aa243fac447a244cc1813ec7e198a894c56c019fe8b90065a0a5eb |