介绍
很多人讨厌bash脚本。每当我要做最简单的事情时,我都必须查阅文档。如何将函数的参数转发给子命令?如何将字符串分配给变量,然后作为命令调用该字符串?如何检查两个字符串变量是否相等?如何分割字符串并获得后半部分?等等。不是我找不到这些答案,而是每次都必须查找它们。
但是,我们不能否认将整个程序当作纯粹的功能发挥作用的能力,以及将一个程序的输出传递到另一个程序的自然程度。因此,我想知道,我们能否将bash的某些功能与Python结合起来?
基础知识
让我们从一个类开始。这是一个简单的方法,将其初始化参数保存到局部变量,然后使用对其自身进行延迟求值并保存结果。
我们让它旋转一下:
使其看起来更像“命令式”
不用每次我们要自定义命令时都去调用PipePy。
相当于
换句话说,我们要使:
相当于
值得庆幸的是,我们的类创建了惰性对象这一事实在很大程度上帮助了我们:
关键字参数
如果要向传递更多参数,则可能会遇到。我们可以轻松地执行。我们可以做得更好吗?
让我们来旋转一下:
Piping
事情开始变得有趣起来。我们的最终目标是能够做到:
我们的过程是:
1、让和方法接受一个仅用于关键字的新关键字参数,该参数将保存在上。
2、在评估期间,如果设置了,它将作为输入参数传递给。
3、重写方法以将左操作数的结果作为输入传递给右操作数。
让我们尝试一下(从之前稍微修改命令以证明它确实有效):
让我们添加一些简单的东西
1、真实性:
现在我们可以作出如下处理:
2、读取/写入文件:
现在可以作出如下操作:
3、迭代
现在可以作出如下操作:
4、表格:
现在可以作出下面操作:
5、普通实用程序:
在子进程中更改工作目录不会影响当前的脚本或python shell。与更改环境变量相同,以下内容不是PipePy的补充,但很不错:
使事情看起来更shell-like
如果我在交互式shell中,则希望能够简单地键入并完成它。
交互式
我们的实例是惰性的,这意味着如果我们对它们的结果感兴趣,则将对它们进行评估,此后不再进行评估。如果我们只是想确保已执行该操作怎么办?例如,假设我们有以下脚本:
该脚本实际上不会执行任何操作,因为调用实际上并未得到评估。我认为一个不错的惯例是,如果不带参数调用强制求值:
因此在编写脚本时,如果要确保实际上已调用命令,则必须用一对括号来调用它:
但是,我们还没有解决问题。考虑一下:
不好!没有改变。对象将其保留在内存中。随后的评估实际上不会调用该命令,而只是返回存储的值。
一种解决方案是通过使用空括号来强制创建副本:
另一个解决方案是:由构造函数返回的实例不应该是惰性的,但由调用返回的实例将是惰性的。
旋转一下:
并且可以预见的是,使用空调用的返回值将具有之前的行为:
没关系 您不会期望会更新其值。
越来越危险
好吧,不错,但是如果我们像人类一样简单地做,那就太好了。嗯,我有个主意:
现在可以作如下操作:
我们还有一步:
现在无济于事:
更危险的事情
用给了我一个灵感。为什么我们必须一直实例化?我们无法在路径中找到所有可执行文件,并根据它们创建实例吗?我们当然可以!
因此,现在,将我们拥有的所有内容都放在一个python文件中,并删除脚本(这是实际bash脚本的转录):
更多阅读
领取专属 10元无门槛券
私享最新 技术干货