【问题标题】:Would Python make a good substitute for the Windows command-line/batch scripts?Python 会很好地替代 Windows 命令行/批处理脚本吗?
【发布时间】:2010-09-17 20:19:38
【问题描述】:

我对@9​​87654321@ 有一些经验,我不介意,但现在我正在做很多 Windows 开发,我需要做一些基本的事情/编写基本的脚本使用 Windows 命令行语言。出于某种原因,这种语言真的让我很恼火,所以我正在考虑学习 Python 并改用它。

Python 适合这样的事情吗?移动文件,创建脚本来执行解压缩备份和恢复 SQL 数据库等操作。

【问题讨论】:

  • 是的!我是最近的皈依者。我曾经编写大量的 Windows bat 文件(加上 NAnt)来完成这些任务,然后切换到 Python,我无法相信它变得如此简单和高效。
  • stackoverflow.com/questions/209470/…。 Windows 的答案与 bash 完全相同。

标签: python command-line scripting


【解决方案1】:

Python 非常适合这些任务,我猜想在开发和调试方面比 Windows 批处理文件要容易得多。

我认为,问题是,确保运行这些脚本的所有计算机都安装了 Python 是多么容易和轻松。

【讨论】:

  • 很容易将 python 转换为 .exe。在 Windows 上,它还可以很好地链接到 COM 和 Windows 服务
【解决方案2】:

总结

Windows:无需思考,使用 Python。 Unix:快速或一次性运行脚本适用于 Bash,严重和/或长寿命脚本适用于 Python。

大话

在 Windows 环境中,Python 绝对是最佳选择,因为 cmd 很糟糕,PowerShell 还没有真正安定下来。更重要的是,Python 可以在多个平台上运行,因此这是一项更好的投资。最后,Python 有一套庞大的库,所以你几乎永远不会碰到“上帝我做不到”的墙。这不适用于 cmd 和 PowerShell。

在 Linux 环境中,这有点不同。许多 one liner 在纯 Bash 中更短、更快、更高效并且通常更具可读性。但是,如果您知道您的快速而肮脏的脚本会保留一段时间或需要改进,请选择 Python,因为它更容易维护和扩展以及you will be able to do most of the task you can do with GNU tools with the standard library。如果不能,您仍然可以从 Python 脚本调用命令行。

当然,您可以使用 -c 选项从 shell 调用 Python:

python -c  "for line in open('/etc/fstab') : print line"

更多关于 Python 用于系统管理任务的文献:

【讨论】:

    【解决方案3】:

    当然,对于这些任务,python 是一个不错的选择(我相信很多人会推荐 PowerShell)。

    从这个角度来看,这是一个很好的介绍:

    http://www.redhatmagazine.com/2008/02/07/python-for-bash-scripters-a-well-kept-secret/

    编辑:关于 gnud 的关注:http://www.portablepython.com/

    【讨论】:

    【解决方案4】:

    你知道PowerShell吗?

    【讨论】:

    • Powershell(以及 cmd 和 bash)在 python 的美丽旁边是可怕的。是的,我是一个狂热者:)
    【解决方案5】:

    任何东西都可以很好地替代 Windows 中的批处理文件系统。 Perl、Python、Powershell 都是不错的选择。

    【讨论】:

      【解决方案6】:

      @BKB 肯定有一个合理的担忧。如果遇到任何标准库无法解决的问题,请查看以下几个链接:

      • Pywin32 是一个用于处理低级 win32 API(高级文件系统修改、COM 接口等)的包
      • Tim Golden's Python page:他维护了一个基于 Pywin32 构建的 WMI 包装程序包,但请务必查看他的 "Win32 How Do I" 页面,了解有关如何在 Python 中完成典型 Windows 任务的详细信息。

      【讨论】:

        【解决方案7】:

        Python 确实非常适合。如果您要走这条路,您可能还想调查SCons,它是一个使用 Python 构建的构建系统。很酷的是构建脚本本身就是成熟的 Python 脚本,所以你可以在构建脚本中做任何你可以在 Python 中做的事情。相比之下,make 看起来很虚弱。

        重读您的问题后,我应该注意到 SCons 更适合构建软件项目,而不是编写系统维护脚本。但无论如何我都会毫不犹豫地向你推荐 Python。

        【讨论】:

          【解决方案8】:

          作为后续,经过一些实验后,我发现 Python 最有用的是任何涉及文本操作(yourStringHere.replace(),正则表达式用于更复杂的东西)或快速测试一些基本概念的情况,它非常适合。

          对于 SQL DB 恢复脚本之类的东西,我发现我通常仍然只使用批处理文件,因为它通常要么足够短,以至于实际上需要更多 Python 代码来进行适当的系统调用,要么我可以重用代码的 sn-ps其他人将编写时间减少到足以调整现有代码以满足我的需求。

          作为附录,我强烈推荐 IPython 作为一个出色的交互式 shell,具有选项卡完成和简单的文档字符串访问。

          【讨论】:

            【解决方案9】:

            我已经在 Linux/Unix 和 Windows 环境中,在 Python、Perl、批处理文件、Bash 等中编写了大量脚本。我的建议是,如果可能的话,安装 Cygwin 并使用 Bash(听起来您的描述(例如安装脚本语言或环境)没有问题吗?)。你会更舒服,因为过渡是最小的。

            如果这不是一个选项,那么这就是我的看法。批处理文件非常笨拙且有限,但对于“复制一些文件”或“重新启动此服务”等简单任务很有意义。 Python 将更简洁、更易于维护且功能更强大。但是,不利的一面是,您最终会使用 subprocess、popen 或类似方法从 Python 调用外部应用程序。否则,您最终会编写更多代码来执行批处理文件中相对简单的事情,例如复制一个装满文件的文件夹。这在很大程度上取决于您的脚本在做什么。例如,Python 中的文本/字符串处理将变得更加简洁。

            最后,它可能不是一个有吸引力的替代方案,但您也可以考虑将 VBScript 作为替代方案。我个人不喜欢将它作为一种语言使用,但如果可移植性是任何一种问题,那么它会因为在任何 Windows 副本中开箱即用而胜出。因此,我发现自己在 VBScript 中编写了作为批处理文件的笨拙脚本,因为我通常不能依赖 Windows 上可用的 Python、Perl 或 Bash。

            【讨论】:

            • “复制一个充满文件的文件夹” - 一个标准模块 shutil 可以提供帮助。
            【解决方案10】:

            Python 和 Pywin32 一起适用于 Windows 自动化。但是,与 Windows Scripting Host 一起使用的 VBScript 或 JScript 也能正常工作,并且不需要安装任何其他东西。

            【讨论】:

              【解决方案11】:

              我最近使用了很多Windows Script Files。比批处理脚本更强大,而且由于它使用 Windows 脚本,因此无需安装。

              【讨论】:

                【解决方案12】:

                尽管我很喜欢 python,但我认为它不是替换基本 Windows 批处理脚本的好选择。

                我看不到有人必须导入 sys、os 或 getopt 等模块来执行您可以使用 shell 执行的基本操作,例如调用程序、检查环境变量或参数。

                另外,根据我的经验,goto 对于大多数系统管理员来说比函数调用更容易理解。

                【讨论】:

                • 我发现显式的 os.this 和 sys.that 是 Python 的一个优势。 shell 的随机特性集合很难让人在精神上掌握。 Python 的库使其更易于理解。
                • 我必须同意 S. Lott 的观点。这并没有太多额外的工作,而且明确性使全局命名空间不会混乱。
                猜你喜欢
                • 2011-06-24
                • 2014-06-16
                • 1970-01-01
                • 2010-09-23
                • 1970-01-01
                • 1970-01-01
                • 2012-08-30
                • 1970-01-01
                相关资源
                最近更新 更多