任何shell都有几组功能.
> Essential Linux / Unix命令.所有这些都可以通过subprocess库获得.这并不总是执行所有外部命令的最佳选择.对于某些作为单独Linux命令的命令,请参见shutil,但您可以直接在Python脚本中实现.另一大批Linux命令位于os库中;你可以在Python中更简单地完成这些.
而且 – 奖金! – 更快速. shell中的每个单独的Linux命令(除了少数例外)都会分叉子进程.通过使用Python shutil和os模块,您不需要分叉子进程.
> shell环境功能.这包括设置命令环境的东西(当前目录和环境变量以及什么不是).您可以直接从Python轻松管理它.
> shell编程功能.这是所有进程状态代码检查,各种逻辑命令(if,while,for等)测试命令及其所有亲属.功能定义的东西.在Python中,这一切都变得非常容易.这是摆脱bash并在Python中完成它的巨大胜利之一.
>互动功能.这包括命令历史记录和什么不是.您不需要这个来编写shell脚本.这仅适用于人工交互,不适用于脚本编写.
> shell文件管理功能.这包括重定向和管道.这比较棘手.其中大部分可以通过子进程完成.但是在shell中一些容易的东西在Python中是令人不快的.特别是像(a | b; c)|的东西某事>结果.这将并行运行两个进程(输出为b的输入),然后是第三个进程.该序列的输出与某些内容并行运行,输出被收集到名为result的文件中.用任何其他语言表达都很复杂.
特定程序(awk,sed,grep等)通常可以重写为Python模块.不要过火.替换你需要的东西并改进你的“grep”模块.不要开始编写替换“grep”的Python模块.
最好的是你可以分步完成.
>用Python替换AWK和PERL.别管其他一切.
>看看用Python替换GREP.这可能有点复杂,但您的GREP版本可以根据您的处理需求进行定制.
>看看用使用os.walk的Python循环替换FIND.这是一个很大的胜利,因为你不会产生尽可能多的进程.
>看看用Python脚本替换常见的shell逻辑(循环,决策等).