python开发命令行脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python开发命令行脚本相关的知识,希望对你有一定的参考价值。

参考技术A

工作中会经常需要写一些命令行脚本,如果还是用if,else判断用户输入实在是太丑陋了。这里介绍几个python里的命令行脚本库,可以帮助我们快速开发好用的命令行脚本。

https://docs.python.org/3/library/cmd.html

使用方式是继承Cmd,实现自己的子类。

参数comletekey是自动补全操作,默认值是Tab, 如果不为None 且readline可用的话,命令会自动完成。
这里的readline指的是python实现的 GNU readline 接口(标准python库里没有,Windows系统不支持)。

参数stdin,stdout是输入输出流,默认是sys.stdin,sys.stout。

cmd提供了一个简单的框架,但是功能比较简单,python还有其他的很多第三方库可以用来写命令行程序。

https://www.cnblogs.com/xueweihan/p/12293402.html 这篇文章对比了各个库的功能,贴在这里:

看起来fire是最简单的,来试一下。

fire 则是用一种面向广义对象的方式来玩转命令行,这种对象可以是类、函数、字典、列表等,它更加灵活,也更加简单。你都不需要定义参数类型,fire 会根据输入和参数默认值来自动判断,这无疑进一步简化了实现过程。

以下示例为 fire 实现的 计算器程序:

从上述示例可以看出,fire 提供的方式无疑是最简单、并且最 Pythonic 的了。我们只需关注业务逻辑,而命令行参数的定义则和函数参数的定义融为了一体。

不过,有利自然也有弊,比如 nums 并没有说是什么类型,也就意味着输入字符串\'abc\'也是合法的,这就意味着一个严格的命令行程序必须在自己的业务逻辑中来对期望的类型进行约束。

Python 会很好地替代 Windows 命令行/批处理脚本吗?

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

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

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

【问题讨论】:

是的!我是最近的皈依者。我曾经编写大量的 Windows bat 文件(加上 NAnt)来完成这些任务,然后切换到 Python,我无法相信它变得如此简单和高效。 见***.com/questions/209470/…。 Windows 的答案与 bash 完全相同。 【参考方案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 用于系统管理任务的文献:

The IBM lab point of view.

A nice example to compare bash and python to script report.

The basics.

The must-have book.

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

redhatmagazine.com URL 不再存在。 Archive.org 捕获页面:web.archive.org/web/20080517104907/http://…【参考方案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 的观点。这并没有太多额外的工作,而且明确性使全局命名空间不会混乱。

以上是关于python开发命令行脚本的主要内容,如果未能解决你的问题,请参考以下文章

Python 会很好地替代 Windows 命令行/批处理脚本吗?

Python 命令行参数解析: optparse 模块

python开发云主机类型管理脚本

如何使用Django 启动命令行及执行脚本

运行第一个Python程序

Python开发SVN批量提交命令脚本