Would Python make a good substitute for the Windows command-line/batch scripts?
我对bash有一些经验,我不介意,但是现在我正在做大量的Windows开发工作,我需要做一些基本的工作/使用Windows命令行语言。出于某种原因,所说的语言确实让我恼火,所以我考虑学习Python并使用它。
Python适合这样的东西吗?移动文件,创建脚本来执行诸如解压缩备份和恢复SQL数据库等操作。
python非常适合这些任务,我想比起Windows批处理文件,在开发和调试中要容易得多。
问题是,我认为,要确保运行这些脚本的所有计算机都安装了python,这是多么的简单和无痛。
总结
Windows:不用考虑,使用python。Unix:Quick或在脚本用于bash时运行它,严肃和/或长寿命脚本用于python。
大话在Windows环境中,python绝对是最好的选择,因为cmd很糟糕,PowerShell还没有真正解决。更重要的是,python可以在多个平台上运行,因此它是一个更好的投资。最后,python有一个巨大的库集,所以您几乎不会碰到"上帝-我-不能做-那"墙。对于cmd和powershell,这不是真的。
在Linux环境中,这有点不同。许多一行程序都更短、更快、更高效,而且在纯bash中可读性更高。但是,如果您知道您的快速而肮脏的脚本将停留一段时间,或者需要改进,那么就使用Python,因为它更易于维护和扩展,并且您将能够使用标准库完成使用GNU工具可以完成的大部分任务。如果不能,您仍然可以从Python脚本调用命令行。
当然,您可以使用-c选项从shell调用python:
1 | python -c "for line in open('/etc/fstab') : print line" |
关于用于系统管理任务的python的更多文献:
IBM实验室的观点。
将bash和python与脚本报告进行比较的一个好例子。
基本知识。
必备书。
当然,对于这些任务,python是一个很好的选择(我相信很多人会推荐PowerShell)。
下面是从这个角度的一个很好的介绍:
http://www.redhatmagazine.com/2008/02/07/python-for-bash-scripters-a-well-keep-secret/
编辑:关于GNUD的关注:http://www.portablepython.com/
@BKB肯定有一个有效的顾虑。下面是一些链接,您将要检查是否遇到任何标准库无法解决的问题:
- pywin32是一个用于处理低级win32 API(高级文件系统修改、COM接口等)的包。
- TimGolden的python page:他维护了一个基于pywin32的wmi包装包,但是一定要查看他的"win32 how do i"页面,了解如何在python中完成典型的Windows任务的详细信息。
您知道PowerShell吗?
任何东西都可以很好地替代Windows中的批处理文件系统。Perl、Python、PowerShell都是不错的选择。
Python当然很适合这样。如果沿着这条路走,您可能还需要研究scons,它是一个用python构建的构建系统。很酷的是,构建脚本实际上是完整的python脚本本身,所以您可以在构建脚本中做任何您可以在python中做的事情。相比之下,它使
在重读您的问题时,我应该注意到,scons更适合于构建软件项目,而不是编写系统维护脚本。但无论如何,我会毫不犹豫地向您推荐python。
作为后续工作,在一些实验之后,我发现python最有用的是任何涉及文本操作(yourstringhere.replace(),更复杂的东西使用regex)的情况,或者快速测试一些基本概念,这是非常好的。
对于像SQL数据库还原脚本这样的东西,我发现我通常还是求助于批处理文件,因为它通常足够短,以至于需要更多的python代码来进行适当的系统调用,或者我可以重用其他人的代码片段,从而将编写时间缩短到足以调整现有代码以满足我的需要。
作为一个附录,我强烈推荐IPython作为一个伟大的交互式shell,具有制表完成和轻松的docstring访问功能。
python和pywin32可以很好地实现Windows自动化。但是,与WinOWS脚本宿主一起使用的vbscript或jscript也可以正常工作,并且不需要安装任何其他内容。
我已经在Linux/Unix和Windows环境中,在python、perl、批处理文件、bash等环境中完成了大量的脚本编写工作。我的建议是,如果可能的话,安装cygwin并使用bash(从您的描述来看,安装脚本语言或env不是问题?)你会更舒服的,因为过渡是最小的。
如果这不是一个选择,那么这是我的选择。批处理文件非常笨拙和有限,但对于诸如"复制一些文件"或"重新启动此服务"之类的简单任务有很大意义。Python将更干净、更易于维护,而且功能更强大。但是,缺点是要么最终使用子进程、popen或类似的方法从python调用外部应用程序。否则,您最终会编写更多的代码来执行批处理文件中相对简单的操作,比如复制一个文件夹中的文件。这很大程度上取决于脚本在做什么。例如,在Python中,文本/字符串处理将更加干净。
最后,它可能不是一个有吸引力的替代方案,但您也可以考虑将vbscript作为替代方案。我个人不喜欢把它当作一种语言来使用,但是如果说可移植性有什么问题的话,那么它会因为在任何一个Windows版本中都可以从现成的软件中获得而胜出。因此,我发现自己编写的脚本在vbscript中作为批处理文件非常笨拙,因为我通常不能依赖于Windows上可用的python、perl或bash。
我最近使用了很多Windows脚本文件。比批处理脚本更强大,而且由于它使用Windows脚本,所以没有什么可安装的。
尽管我很喜欢python,但我认为它不是替换基本的Windows批处理脚本的好选择。
我看不到有人必须导入诸如sys、os或getopt之类的模块才能执行shell可以执行的基本操作,比如调用程序、检查环境变量或参数。
而且,根据我的经验,goto对于大多数系统管理员来说比函数调用更容易理解。