Seb*_*ian 20
我想到了两个好处:
wc,ls,cat,grep,sed...等等.为什么经常使用Python的subprocess模块?我越来越喜欢使用gnu parallel,你可以用它来并行执行你的bash脚本.例如,从手册页中,批量创建并行目录中所有jpgs的大拇指:
ls *.jpg | parallel convert -geometry 120 {} thumb_{}
顺便说一句,我通常在我的bash脚本中有一些python调用(例如用于绘图).使用最适合任务的任何东西!
bash与其说是一种语言,还不如说是一种命令解释器,它已经被黑死了,以使其看起来像脚本语言。这对于最简单的1-5行一次性任务非常有用,但是在Perl或Python中非常简单的事情(例如数组操作)在bash中非常丑陋。我还发现bash往往无法通过两个关键的经验法则:
6个月的规则,该规则要求您应该能够轻松辨别所编写脚本的目的和基本机制,但在6个月内没有看过。
“每分钟WTF”规则。每个人都有自己的极限,而我的很小。一旦达到3 WTFs / min,我正在寻找其他位置。
至于像Perl和Python这样的脚本语言中的“脱壳”,我发现我几乎永远不需要这样做(免责声明:我几乎用Python编写了100%的代码)。Python os和shutil模块大部分时间都是我所需要的,并且有用于处理tarfile,gzip文件,zip文件等的内置模块。其中有一个glob模块,一个fnmatch模块……很多那里的东西。如果遇到需要并行化的内容,则将代码缩进一个级别,将其放入'run()'方法中,然后将其放入扩展threading.Thread或multiprocessing.Process的类中,实例化为您想要的,在每一个上调用'start()'。一般少于5分钟即可获得并行执行。
祝你好运。希望这可以帮助。
与 Python 或 Perl 脚本相比,POSIX shell 脚本最重要的优点是几乎每台 Unix 机器上都可以使用 POSIX shell。(还有一些任务 shell 脚本恰好更方便一些,但这不是主要问题。)如果可移植性对您来说不是问题,我认为没有必要学习 shell 脚本。
好处是它就在那里。除非您使用Python(或Perl)作为外壳,否则编写脚本执行简单循环是一堆额外的工作。
对于调用其他程序的简短脚本,我将使用Bash。如果我想保留输出,则可能会选择使用Python。
例如:
for file in *; do process $file ; done
Run Code Online (Sandbox Code Playgroud)
process我要在每个文件上运行的程序在哪里,或者...
while true; do program_with_a_tendency_to_fail ; done
Run Code Online (Sandbox Code Playgroud)
在Python或Perl中执行上述任一操作都是过分的。
对于实际编写我希望随着时间的推移可以维护和使用的程序,Bash很少是完成这项工作的正确工具。特别是由于大多数现代Unices都随附了Perl和Python。
| 归档时间: |
|
| 查看次数: |
18850 次 |
| 最近记录: |