我敢打赌,您不知道可以用Python编写Shell脚本。
对于任何程序员或系统管理员而言,shell脚本编写都是一项至关重要的技能。它使您可以自动完成繁琐的任务,将它们变成一致的,可重复的动作。问题是,这可能有点令人生畏,尤其是当您考虑到大多数shell脚本方言缺乏像Python和Ruby之类的语法技巧时。
我什至会变得更钝。大多数shell脚本都比普通的pug更为丑陋。
此外,对于类似UNIX的平台,有多种shell可供使用,包括Bash,CSH,KSH和(我最喜欢的)FISH。结果,编写在每个平台上都可以使用的一致的shell脚本可能是一个挑战。
必须有一种更好的方法,对吧?
介绍sh.py
有。当我不为PCPC.me编写代码时,我是在用Python编写代码,以获取乐趣和收益。我真的很喜欢Python,因为它具有灵活性,固有的美感以及它如何通过设计来强制编写好的代码。如果这对您来说听起来不错,但是您还不知道这种很棒的语言,那么为什么不访问这五个很棒的网站来学习Python编程呢?
我遇到了这个很棒的图书馆几个月前叫做sh.py,它使您可以在Python程序的范围内调用程序,传递参数和处理输出。
那么,这意味着什么?简而言之,这意味着您具有shell脚本的全部功能,但是从一种易于理解的语言中开始,它本质上是模块化的,并且支持面向对象的编程。太好了吧?
那么,我们如何使用它?
我正在为您做一些假设。首先是您正在运行Linux,OS X或FreeBSD。目前,sh.py在Windows上不起作用。但是,如果需要,您始终可以安装Linux虚拟机。我的同事贾斯汀·波特(Justin Pot)写了一篇非常有用的文章,您可以在这里查看。
我做的第二个假设是您正在运行最新版本的Python(2.7或3.2)。并且您已经安装了PIP软件包管理器。如果不是这种情况,请查看Python的官方文档。
好吗?然后我们继续。
让我们开始编码
在终端中,使用以下命令安装sh.py。
sudo pip install sh
我们这样做的原因在这里使用'sudo'是因为我们需要提升权限以添加新的Python包。如果sh.py安装正确,您将在终端中看到以下几行。
Downloading/unpacking sh Downloading sh-1.09.tar.gz Running setup.py egg_info for package shInstalling collected packages: sh Running setup.py install for shSuccessfully installed shCleaning up…
如果没有这样说,很可能安装失败。伤心。如果是这种情况,请尝试检查您的权限以及您是否已实际安装了PIP。如果仍然不存在,请尝试询问Stack Overflow(之前由我们的Internet编辑器Saikat Basu讨论过)或PCPC.me Answers。
现在排序后,创建一个新目录。我们将在这里放置所有代码。打开文本编辑器,然后创建一个名为“ shtest.py"的文件。在这里,我们将简单地创建一个新文件,然后列出我们所在目录的内容。听起来不错吗?
在shtest.py中,添加以下几行。
#!/usr/bin/env pythonimport sh
sh.touch('hello')print(sh.ls(‘-l'))
简单的东西在这里。让我们来分解一下。
#!/usr/bin/env python
这一行称为哈希爆炸,它指示外壳程序以Python程序打开此文件。这样,您就可以像打开外壳脚本(./shtest.py)一样打开它,而不用直接使用Python(python shtest.py)来打开它。不错,对吧?
import sh
此行导入了我们刚才安装的sh库。没有这个,我们将无法进行,因此请确保它已包含在您的代码中!
sh.touch('hello')
您可能已经熟悉Linux命令“触摸"。这将创建一个具有您指定文件名的空文件。在这里,我们直接从Python内部调用“触摸"。如您所见,我们已经以'sh。'开头,并且为它传递了'hello'参数。
print(sh.ls(‘-l'))
您可能对'print'命令很熟悉,该命令输出文本到控制台。在这里,我们将其传递为“ sh.ls"作为参数。这将调用Linux ls程序,该程序列出目录的内容。我们还传递了参数“ -l",该参数可打印出有关我们在其中执行目录的内容的详细信息。
它可以正常工作吗?亲自看看。
那些鹰眼的人会注意到,该目录中还有另一个文件名为“ gitsh.py"。
Sub Commands
sh.py中有一些钩子可以吸引已经流行的流行程序。这些钩子包括git,sudo和大量的Linux实用程序。这些使从Python内部与这些服务的交互变得更加容易。
多么容易?好吧,我将向您展示如何仅用三行代码来初始化一个空的Git存储库。首先,创建一个名为“ gitsh.py"的文件,然后在您喜欢的文本编辑器中将其打开。
在其中,编写以下三行。
其中大部分应该很漂亮对你很熟悉。您会注意到我们从“ sh"导入了“ git"。这只是意味着我们已经从模块中导入了特定功能,而忽略了其他所有内容。
之后,我们初始化了存储库。
print(git.init())
打印。您应该注意到,我们在调用git时没有先执行.sh。这是因为我们专门从“ sh"库导入了git功能。
就是这样。当我们运行gitsh.py时,应该在您的终端中看到以下行。
结论
这是sh.py的简单介绍。如果您想了解更多信息,请在此处查看官方文档。但是,如果遇到困难,请随时在下面给我留言,我会尽力帮助您。