我在bash里做备份,而且我还写了其他几个bash脚本。 我想转移到Python,因为我需要学习人工智能技术的Python,我总是推迟。 由于我必须经常做系统pipe理的事情,所以我想如果我在python中做事情,那么它会擅长python。 现在我很困惑,
1)我已经看到,我可以在bash中执行一行,但是在python中,我需要编写15行代码来执行tar文件备份。 sed,awk可以在python中过滤文件,我必须写更多的行。 所以我的问题是我走错了路。 python是否真的用于系统pipe理员的事情或不。 对我来说,就像在J2EE中创build一个5页的静态网站,而不是使用纯HTML。
2)我想知道为什么人应该selectpython如果bash可以做任何事情。 我只是在讨论系统pipe理员的事情。
所以我需要知道我是通过尝试使用Python来杀死自己还是仅仅因为我还在学习,我发现它很难?
我只是想知道python是否真的意味着备份,检查日志文件等。
Python是像Perl一样的通用脚本语言。 这意味着它是比bash脚本更强大的工具,但这也意味着语法通常会变得更加冗长,编写脚本将变得更加复杂。 Bash脚本具有特定领域的优势,这意味着他们做了大量的假设,使大多数任务更容易。 但是,如果bash所做的假设不适合你需要做的任务,那么你可能需要漫长的工作才能使事情按照你需要的方式工作。
这是Windows系统pipe理员在处理批量写入或VBScript时所面临的问题。 PowerShell有助于缓解这一点,但是您仍然面临着“这个任务是否足够复杂以至于需要PowerShell,或者是一个足够好的批处理脚本来完成可靠工作?”的问题。
实际上,这取决于你需要做的任务。 如果一个任务更容易在Python中编写和维护,请使用它。 如果bash实际上非常简单,那就使用它。 脚本语言是工具 。 像这样使用它们。 使用最适合您任务要求的工具。
当我写剧本时,我有一个心理清单:
你在这里问一个有点修辞的问题。 这就像问一个套接字集合工作时为什么有人在他们的工具箱中有不同的套接字集合。 每个工具(在这种情况下,程序/语言/脚本环境)都有其独特的优势和弱点。 例如,为什么当CFEngine(写在CI认为)做同样的事情时,你会使用Puppet(用Ruby编写)?
脚本语言在shell环境中最大的优点之一就是可读性(Perl模糊不清)。 在语言string操作中也可以更容易。 例如,在Bash中,你可能需要将你的string回显到sed / awk / grep来parsing它,但是在Python / Ruby / Perl中,你有正则expression式和string操作。与远程套接字的通信可能比写一个脚本围绕curl,wget或netcat。 脚本语言也不需要fork来完成它们的处理。 例:
myvar=$(echo "my string" | grep string | cut -d"" -f 3)
这将导致创build三个单独的叉子,从而减慢系统。
底线Python的devise是为了满足需求,因为它有它的长处和短处。 一个伟大的系统pipe理员和一个平庸的系统pipe理员之间的区别是他们知道各种工具的优点。 学习Python是一个好主意,但它不是一个适合所有工具的工具。
我是一个系统pipe理员和一个Python程序员。 我通常所做的就是提前思考,并重点说明为了在bash和python中实现某些东西,然后使用最好的工具(使我获得更多速度/能力的工具)而必须做的事情。 一个不排除另一个,看看python os模块 ,你会发现有很多东西可以帮助系统pipe理。
作为一个经验法则(我使用的是YMMV):如果你将不得不运行很多的命令,你会更好地使用bash,如果你将不得不从格式和计算文本文件python会更好。
另外,你说你正在学Python,所以我build议你坚持你最先了解的东西。 获取一些testing项目,以获得与python的亲密关系,当你变得更好的时候,你会看到你会自然倾向于按照你想做的事情的复杂性来做bash或python的事情。
作为一个经常使用python和bash的系统pipe理员,我可以说我经常遇到同样的问题。 一般来说 (非常一般),我认真考虑使用python for sysadmin的东西,当我意识到我将需要多个open()命令或需要导入subprocess(或类似),如果我在python实现。 也就是说,有时python稍后会更容易添加额外的function。 在很多场合,我写了一些我认为很简单的东西,然后用python(或其他编程语言)重写了它,因为我意识到它比我想象的要复杂得多。
真的是由程序员来决定。 如果你不知道怎么做,不排除一种方法 – 如果你能从经验中学习,为什么不呢?