不确定是否使用 Python 进行系统管理

不确定是否使用 Python 进行系统管理

我以前用 Bash 做备份,也写过一些其他的 Bash 脚本。我想把它换成 Python,因为我需要学习 Python 的 AI 技术,但我总是拖延。因为我经常要做系统管理工作,所以我想如果我用 Python 做事,那么 Python 会很好。现在我对一些事情感到困惑

1)我发现在 bash 中我可以用一行代码完成一些事情,但在 python 中我需要为此编写 15 行代码。例如,制作 tar ball 备份。sed、awk 可以在一行中过滤文件,而在 python 中我必须编写更多行。所以我的问题是,我是否走错了路。python 是否真的用于系统管理工作。对我来说,这就像在 J2EE 中创建一个 5 页的静态网站,而不是使用纯 html。

2)我想知道如果 bash 可以做所有事情,为什么人们要选择 python。我只谈论系统管理员的事情。

所以我需要知道我尝试使用 Python 是否太过分了,或者仅仅是因为我仍在学习所以觉得它很难?

我只是想知道 python 是否真的适合做备份、检查日志文件等事情。

答案1

Python 是一种通用脚本语言,就像 Perl 一样。这意味着它比 bash 脚本更强大,但这也意味着语法通常更冗长,编写脚本会更复杂。Bash 脚本的优势在于它是领域特定的,这意味着它们会做出许多假设,使大多数任务变得更容易。但是,如果 bash 所做的假设不适合您需要执行的任务,您可能需要走很长的路才能让事情按照您需要的方式进行。

这与 Windows 系统管理员在处理批处理或 VBScript 编写时面临的问题相同。PowerShell 有助于缓解这一问题,但您仍然面临“这项任务是否复杂到需要 PowerShell,或者批处理脚本是否足以可靠地完成工作?”的问题。

实际上,这取决于你需要完成的任务。如果用 Python 编写和维护某个任务更容易,就使用它。如果 bash 实际上非常简单,就使用它。脚本语言是工具. 按原样使用它们。使用最适合您任务要求的工具。

当我编写脚本时,我会在脑海里列出一份清单:

  1. 我到底要完成什么任务?第一步是总是定义问题。
  2. 使用哪种语言可以更快地编写此脚本?我的时间很宝贵。
  3. 哪种语言更适合其他人阅读、理解和支持这项任务?其他人的时间也很宝贵。
  4. 哪种语言能够提供更强大、更可靠或更持久的修复?我希望编写一次即可永久修复。
  5. 有什么原因导致语言不合适?Python 或 PowerShell 是否不可用,或者某些模块是否无法安装?我的批处理文件或 bash 脚本是否会调用无法保证存在且我无法通过脚本维护的程序?

答案2

您在这里问了一个有点反问的问题。这就像问为什么有人的工具箱里有不同的套接字组,而一个套接字组就可以工作。每个工具(在这种情况下是程序/语言/脚本环境)都有自己独特的优点和缺点。例如,当 CFEngine(相信是用 CI 编写的)做同样的事情时,为什么您会使用 Puppet(用 Ruby 编写)?

脚本语言相对于 shell 环境的最大优势之一是可读性(即使经过混淆的 Perl 也不例外)。在语言字符串操作中,它也变得容易得多。例如,在 Bash 中,您可能需要将字符串回显到 sed/awk/grep 来解析它,但在 Python/Ruby/Perl 中,您有内置的正则表达式和字符串操作。此外,与远程套接字的通信可能比编写 curl、wget 或 netcat 脚本更容易。此外,脚本语言不需要 fork 来进行处理。示例:

myvar=$(echo "my string" | grep string | cut -d"" -f 3)

这会导致创建三个单独的分叉,从而减慢系统速度。

归根结底,Python 的设计初衷是为了满足某种需求,因此它有自己的优势和劣势。优秀的系统管理员和平庸的系统管理员之间的区别在于,他们知道各种工具的优势。学习 Python 是个好主意,但它并不是万能的工具。

答案3

我是一名系统管理员和一名 Python 程序员。我通常会提前思考并权衡我需要做些什么才能在 Bash 和 Python 中实现某些目标,然后使用最适合该工作的工具(能够提高速度/能力的工具)。两者并不排斥,请看一下 Python操作系统模块您将会看到那里有很多东西可以帮助系统管理。

根据经验法则(我使用,YMMV):如果您必须运行很多命令,那么使用 bash 会更好,如果您必须对文本文件进行格式化和计算,那么使用 python 会更好。

另外,你说你正在学习 Python,所以我建议你先坚持你最了解的东西。做一些测试项目来熟悉 Python,当你熟练掌握 Python 后,你会发现,根据你想要做的事情的复杂程度,你自然会倾向于用 Bash 或 Python 来做事情。

答案4

作为经常使用 python 和 bash 的系统管理员,我可以说我经常有与您相同的问题。一般来说(一般来说)当我意识到如果用 Python 实现系统管理员功能,我需要多个 open() 命令或需要导入子进程(或类似命令)时,我会认真重新考虑使用 Python 进行系统管理员操作。话虽如此,但有时使用 Python 更容易在以后添加额外功能。很多时候,我都用 Bash 编写了一些我认为很简单的东西,然后用 Python(或任何编程语言)重新编写了它,因为我意识到它比我想象的要复杂得多。

实际上,这取决于你作为程序员的决定。如果你不知道该怎么做,不要排除一种方法——如果你能从经验中学习,为什么不呢?

相关内容