当前位置: 首页 > 面试题库 >

如何在Python中实现常见的bash习惯用法?

范振海
2023-03-14
问题内容

目前,我通过一堆不记得的AWK,sed,Bash和一小部分Perl对文本文件进行操作。

我见过提到python可以胜任此类事情的地方。如何使用Python替换Shell脚本,AWK,sed和朋友?


问题答案:

任何外壳程序都有几套功能。

  • 基本的Linux / Unix命令。所有这些都可以通过子流程库获得。对于执行 所有 外部命令,这并不总是最好的首选。还要查看shutil中的一些命令,这些命令是独立的Linux命令,但是您可能可以直接在Python脚本中实现。另一大批Linux命令在os库中。您可以在Python中更简单地完成这些操作。

还有-奖金! -
更快速。外壳程序中的每个单独的Linux命令(有一些例外)都会派生一个子进程。通过使用Pythonshutilos模块,您无需派生子进程。

  • 外壳环境功能。这包括设置命令环境的内容(当前目录和环境变量以及诸如此类)。您可以直接从Python轻松地对此进行管理。

  • Shell编程功能。这是所有过程状态代码检查,各种逻辑命令(如果有,为……等),测试命令及其所有亲属。函数定义的东西。在Python中,这一切都非常容易。这是摆脱bash并在Python中完成的巨大胜利之一。

  • 互动功能。这包括命令历史记录和“不”记录。编写shell脚本不需要此。这仅用于人类交互,而不用于脚本编写。

  • Shell文件管理功能。这包括重定向和管道。这比较棘手。其中大部分可以通过子流程来完成。但是一些容易在shell中执行的操作在Python中是令人不快的。具体来说就是这样的东西(a | b; c ) | something >result。这将并行运行两个进程(输出a作为的输入b),然后是第三个进程。该序列的输出与并行运行,something并将输出收集到名为的文件中result。用任何其他语言表达都是很复杂的。

特定程序(awk,sed,grep等)通常可以重写为Python模块。不要太过分。替换您需要的内容并发展您的“ grep”模块。不要开始编写替换“grep”的Python模块。

最好的事情是您可以分步执行此操作。

  1. 用Python替换AWK和PERL。别的一切。
  2. 看一下用Python替换GREP。这可能会稍微复杂一点,但是您的GREP版本可以根据您的处理需求进行定制。
  3. 看一下用来代替FIND的Python循环os.walk。这是一个很大的胜利,因为您不会产生那么多的进程。
  4. 看一下用Python脚本替换常见的shell逻辑(循环,决策等)。


 类似资料:
  • 问题内容: 常见的JavaScript引擎(例如V8和WebKit的JavaScriptCore)是否对JavaScript字符串使用字符串插入?还是它们实际上在内存中保留了多个相同字符串的实例? 问题答案: 是。通常,会插入JS源中的任何文字字符串,标识符或其他常量字符串。但是,实施细节(例如,确切地说是被实习者)以及实习发生的时间都不同。 请注意,尽管字符串值与字符串对象不同,但字符串对象没有

  • 这个问题要求解释在各种语言中如何在后台实现异常处理,但没有收到Python的任何回应。 我对Python特别感兴趣,因为Python通过EAFP原则“鼓励”异常抛出和捕捉。 我从其他SO答案中了解到,如果预计很少引发异常,try/catch块比if/etc语句更便宜,并且调用深度很重要,因为填充stacktrac很昂贵。这可能主要适用于所有编程语言。 python的特殊之处在于EAFP原则的高优先

  • 本文向大家介绍常见的在Python中实现单例模式的三种方法,包括了常见的在Python中实现单例模式的三种方法的使用技巧和注意事项,需要的朋友参考一下 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的

  • 问题内容: 我看过Pickle文档,但我不知道泡菜在哪里有用。 Pickle有哪些常见用例? 问题答案: 我遇到的一些用途: 1)将程序的状态数据保存到磁盘,以便它可以在重新启动时从中断处继续执行(持久性) 2)在多核或分布式系统中通过TCP连接发送python数据(编组) 3)将python对象存储在数据库中 4)将任意python对象转换为字符串,以便可以将其用作字典键(例如,用于缓存和备忘录

  • 本文向大家介绍Python实现常见的回文字符串算法,包括了Python实现常见的回文字符串算法的使用技巧和注意事项,需要的朋友参考一下 回文 利用python 自带的翻转 函数 reversed() 自己实现 最长的回文子串 暴力破解 暴力破解,枚举所有的子串,对每个子串判断是否为回文, 时间复杂度为 O(n^3) 动态规划 时间复杂度为 O(n^2), 空间复杂度为 O(n^2) Manache

  • 问题内容: 我以前的编程中,代码段仅用于调试目的(记录命令等)。通过使用预处理程序指令,可以完全禁用这些语句以进行生产,如下所示: 做类似的事情的最好方法是什么? 问题答案: 如果只想禁用日志记录方法,请使用该模块。如果日志级别设置为排除调试语句,那么它将非常接近无操作(它仅检查日志级别并返回而不插入日志字符串)。 如果要在特定条件下以字节码编译时实际删除代码块,则唯一的选择是相当神秘的全局变量。