Bash 与 Python:您应该使用哪种语言?

这两种编程语言各有优缺点,使其更适合某些任务。
197 位读者喜欢这篇文章。
Perl tricks for system administrators

Opensource.com

BashPython 是大多数自动化工程师最喜欢的编程语言。两者都有优点和缺点,有时很难选择您应该使用哪一个。 诚实的答案是:这取决于任务、范围、上下文和任务的复杂性。

让我们比较这两种语言,以便更好地了解每种语言的优势所在。

Bash

  • 是一种 Linux/Unix shell 命令语言
  • 非常适合编写 shell 脚本,这些脚本使用命令行界面 (CLI) 实用程序,利用一个命令的输出到另一个命令(管道),以及执行简单任务(最多 100 行代码)
  • 可以按原样利用命令行命令和实用程序
  • 启动时间比 Python 快,但执行时间性能较差
  • Windows 中未预装;您的脚本可能与多个操作系统不兼容,但 Bash 是大多数 Linux/Unix 系统上的默认 shell
  • 与其他 shell(例如,csh、zsh、fish)完全兼容
  • 管道 ("|") CLI 实用程序,如 sed、awk、grep 等,会降低其性能
  • 缺乏许多函数、对象、数据结构和多线程,这限制了其在复杂脚本/编程中的使用
  • 缺乏良好的调试工具和实用程序

Python

  • 是一种面向对象编程 (OOP) 语言,因此它比 Bash 更通用
  • 几乎可以用于任何任务
  • 可在大多数主要操作系统上运行,并且在大多数 Unix/Linux 系统上也默认安装
  • 非常类似于编写伪代码
  • 具有简单、清晰、易学且易于阅读的语法
  • 拥有大量的库、文档和一个活跃的社区
  • 提供比 Bash 更好的错误处理功能
  • 拥有比 Bash 更好的调试工具和实用程序,这使其成为开发涉及多行代码的复杂软件应用程序的绝佳语言
  • 应用程序(或脚本)可能包含许多第三方依赖项,必须在执行之前安装这些依赖项
  • 对于简单任务,需要编写比 Bash 更多的代码行

我希望这些列表能让您更好地了解何时以及使用哪种语言。

在您的日常工作中,您更多地使用哪种语言,Bash 还是 Python?请在评论中分享。

标签

16 条评论

这是数学分析
Bash 有 3 个“不”,2 个“缺乏”,1 个“更好”,1 个“较差”,1 个“出色”
Python 有 2 个“更好”,1 个“出色”

这不是足球。“记分表”在您尝试为任务选择语言时没有帮助。首先:看看您的任务。第二:为*该任务*选择最佳语言。就是这样。有时,它会是 Bash——无论有没有记分表。我可以告诉您,99.99% 的情况下,它会在配置或维护系统时使用。因为 bash 是一种领域特定语言,而不是像 Python 这样的通用编程语言。 混淆之处在于,Python 在许多情况下在系统管理领域中都很好,但 Bash 的领域仅限于此。诚实地说,比较这两种语言就像苹果和橙子一样。

回复 作者 Greg P

这真的取决于任务。
我喜欢用 Python 自动化所有与 HTTP 通信的事物。
在 bash 中使用 curl 执行此操作是可能的,但很丑陋。

当与其他本地程序交互时,我喜欢 bash。

Bash 是 Linux 系统管理的本地语言。您将通常在 shell 提示符下键入的内容放入 bash shell 脚本中。

Python 是一种编程语言。您使用它和其他编程语言来完成您通常无法通过在 shell 提示符下输入命令来完成的事情。

完全同意您的观点!

回复 作者 Lee Reynolds (未验证)

很好的信息,我两种都喜欢,但 Python 可以用于几乎任何任务这一事实胜过一切。

可能是 python,对于任何超过几行的代码来说肯定是。还有一些简洁的 CLI 工具(无论是 git 还是 skopeo)可以从 python 访问(参见 subprocess.Popen(),shlex),如果它们没有等效项 (Requests)。在更高的层面上,Ansible 发挥作用……或者 Bash 来完成循环。 :)

是的,我更喜欢 ansible/python/bash 的混合用于许多任务,只是让我的生活更轻松 :)

回复 作者 Pavel Zubaty (未验证)

事实上,bash 比 python 慢得多。因为 python 是用 C 编写的,这使其接近操作系统的核心。

GNU Bash 作为本地 Linux 工具,最初设计用于执行常规管理任务,我们中的一些人确实将其用于许多其他事情,这在某种程度上是好的。

除了启动时间,Bash 比 Python 慢,但无论如何,这种差异太小,人类无法察觉

回复 作者 tamrakar

谢谢。这很有帮助

Archit,这是一个很好的资源! :)

它们相互补充。我在 Linux 上编写许多小型 bash 脚本,就像我在 Windows 上编写 powershell 一样。然后我通过修改后的子进程运行它们,并在 json 中返回响应。所有将它们粘合在一起的胶带,如身份验证、web、ssh、https 等都是 python。

Bash 也非常以操作系统为中心,并且严重依赖 Linux 命令。虽然编写在所有 windows/macOS/linux 上完全相同的 python3 非常容易,只要您选择在所有地方都有效的模块即可。(现在大多数流行的 pypi 模块都这样做)。

您是否有任何数据或证据表明 bash 更慢? 设置 python 的开销,以及它在版本之间会发生可怕的破坏…… 它的依赖地狱和许多其他缺点都没有提及。这是一个相当有偏见的观点

与大多数人一样,这取决于工作。如果它少于 10 行,我倾向于更喜欢 bash,尤其是当它将几个其他实用程序连接在一起形成一个实用程序时。

对于 bash,我不同意一种说法
管道 ("|") CLI 实用程序,如 sed、awk、grep 等,会降低其性能

恰恰相反…… 管道 CLI 实用程序可以提高其性能,因为管道中的每个步骤都是并行的,因此它可以同时处理多个部分,从而利用多个内核。当对 TB 文件进行多层或处理时,这非常有效。

Python 缺乏对真正多线程的支持,尽管它可以像 bash 一样进行类似多进程的操作,但对于那些适合在管道中运行的任务,bash 中的 | 使其比 python 容易得多。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.