如何在Python中实现常见的bash习语?
最近我发现了如何结合bash和ipython的最佳部分。到目前为止,这对我来说比使用subprocess等更舒适。你可以轻松地复制现有bash脚本的大部分内容,并以python的方式添加错误处理 🙂
这是我的结果:
#!/usr/bin/env ipython3 # *** How to have the most comfort scripting experience of your life *** # ###################################################################### # # … by using ipython for scripting combined with subcommands from bash! # # 1. echo "#!/usr/bin/env ipython3" > scriptname.ipy # creates new ipy-file # # 2. chmod +x scriptname.ipy # make in executable # # 3. starting with line 2, write normal python or do some of # the ! magic of ipython, so that you can use unix commands # within python and even assign their output to a variable via # var = !cmd1 | cmd2 | cmd3 # enjoy ;) # # 4. run via ./scriptname.ipy - if it fails with recognizing % and ! # but parses raw python fine, please check again for the .ipy suffix # ugly example, please go and find more in the wild files = !ls *.* | grep "y" for file in files: !echo $file | grep "p" # sorry for this nonsense example ;)
请参阅IPython文档中的系统shell命令和使用它作为系统shell。
之所以点赞是因为出于某种奇怪的原因,没某些情况下IPython中的!命令,这是非常关键的;特别是因为你还可以将它们的输出分配给一个变量(行的列表),如filelines = ! cat myfile
而且你还可以在shell命令中使用python变量作为$var
?哇。这应该成为被接受的答案。
而且你还可以在jupyter笔记本中使用它。
在这篇文章中,我们会讨论如何在Python中实现常见的Bash语法。这个问题的出现是因为有人想要在Python中实现类似于Bash的操作,而不是写Bash脚本。以下是一些可以帮助你实现这个目标的库和工具:
1. Plumbum:这是一个强大的库,它可以帮助你在Python中执行Shell命令。你可以在这里找到更多关于Plumbum的信息。
2. Sarge:这是另一个可以帮助你在Python中执行Shell命令的库。你可以在这里找到更多关于Sarge的信息。
3. sh:这是一个简单而强大的库,可以帮助你在Python中执行Shell命令。你可以在这里找到更多关于sh的信息。
如果你想用Python替代awk、sed和grep,我推荐使用pyp。你可以在这里找到更多关于pyp的信息。它是一个类似于awk或sed的Linux命令行文本处理工具,使用标准的Python字符串和列表方法,以及定制的函数,可以在高强度的生产环境中生成快速的结果。
另外,你还可以看一下Envoy,它是sh的一个替代品。你可以在这里找到更多关于Envoy的信息。
通过使用这些库和工具,你可以在Python中实现常见的Bash语法,而不必编写Bash脚本。这将为你提供更大的灵活性和控制力,同时保持Python的简洁和易读性。希望这些资源能对你有所帮助!
问题的出现原因:
在编写脚本时,人们常常使用Bash作为脚本语言。然而,Bash在某些方面存在一些问题,比如执行外部命令时需要fork一个子进程,这会降低执行效率。此外,Bash的一些特性在表达上也相对复杂,不够直观。因此,有些人希望能够用Python替代Bash来编写脚本,以提高效率和可读性。
解决方法:
Python提供了一些库和模块,可以帮助我们实现一些常见的Bash习惯用法。首先,Python的subprocess库可以用来执行外部命令,不需要fork子进程,效率更高。另外,shutil库也提供了一些类似于Linux命令的功能,可以直接在Python脚本中实现。此外,Python的os库也提供了一些Linux命令的简化版本,使用起来更方便快捷。
除了执行外部命令,Python还可以直接管理Shell环境的特性,比如当前目录和环境变量等。对于Shell编程的特性,Python更加简单易用,提供了各种逻辑命令(if、while、for等)、测试命令和函数定义等功能。与人机交互的特性,比如命令历史记录等,对于编写脚本来说并不需要,所以不必考虑。文件管理的特性,比如重定向和管道,可以使用subprocess来实现,但有些复杂的表达式可能在Python中不太容易表达。
此外,Python还提供了一些模块,可以替代一些特定的程序(如awk、sed、grep等)。但需要注意的是,替代这些程序时不必一下子全部替换,可以根据实际需求逐步替换,演化出自己的模块。最好的方法是分步进行替换,先替换AWK和PERL,再替换GREP,最后替换FIND和一些常见的Shell逻辑。
最后,Python还提供了一些第三方模块,如glob模块,可以用来扩展路径和文件名的模式。此外,可以通过subprocess方法的shell参数来轻松地将Shell管道传递给subprocess方法。
总结起来,通过使用Python的一些库和模块,我们可以更高效地实现一些常见的Bash习惯用法,并逐步将一些特定的程序替换为Python模块,从而提高脚本的效率和可读性。尽管有人认为一些任务更适合用Shell脚本来完成,但Python作为一种更强大和易于使用的脚本语言,可以替代Bash在很多情况下更好地满足我们的需求。