可不可以把 shell 脚本替换为 Python 脚本?

108 天前
 Canglin
目前公司生产上大概有 1000+的 shell 脚本,最近总能刷到 Python 替换 shell 的言论,不知道可不可行,目前我也不清楚 Python 照 Shell 来说有什么优势,之前做过一个临时工单,抽取 3000+文本文件中的特定条件的字符串到指定文件中,Shell 执行了 14 小时左右 Python 执行了大概 20 分钟,不知道可不可以作为参考依据
本人运维
9831 次点击
所在节点    程序员
100 条回复
somebody1
108 天前
凭你的描述和对问题探究的深度,不动是最好的
baobao1270
108 天前
首先建议公司用的话能动就别换
Python 的问题是,你不知道系统带的 Python 是什么版本,然后系统自带 Python 装包会污染系统的 python 环境
外部交互比较麻烦,以前一行搞定的事情现在要 subprocess
但是复杂的脚本用 Python 优势就很明显了,而且因为转义遇到的 bug 也少
skyrim61
108 天前
发出来看看, 不然大伙不知道, 注意规避敏感信息
lazyyz
108 天前
生产不动一般不会出问题!
业务既然能接受 14 小时,为什么要变呢?
catsoul
108 天前
能用就别动

这种事情等着上级驱动,你做了才是完成本职工作

如果你自己擅自改了,做好了算是正常(无功无过),但凡一个脚本做出问题,导致哪怕一丁点生产事故,这锅你就牢牢焊死在背上吧,主动离职谢罪
baobao1270
108 天前
抽取 3000+文本文件中的特定条件的字符串到指定文件中,这个肯定是 python 很方便,用 shell 其实每一行都会新建进程,开销很大,python 是进程内部处理了
想要学习的话以后遇到新的这种纯文本转换/提取的任务,如果要写新的脚本的话,可以用纯 python 写,记得不要调外部包,加 type hinting
fsdrw08
108 天前
不建议换,理由同 2 楼
即便真要换,也该换成 Ansible+Ansible runner
Canglin
108 天前
@somebody1 #1 是的,我就是个二把刀,只是想磨练自己的技术🤣
Canglin
108 天前
@baobao1270 #2 是这样的,我就是个二把刀,平安县翻译的水平,我想请教一下什么样的脚本就可以算是复杂脚本了
Canglin
108 天前
@skyrim61 #3 这个不太方便,不好意思
Canglin
108 天前
@lazyyz #4 不是,是临时工单,他们对这个也没有要求,我只是想举个例子,看看是不是所有的 shell 脚本都是比 Python 脚本效率低
Canglin
108 天前
@catsoul #5 那我学习技术的机会是不是没有了
ho121
108 天前
Shell 执行了 14 小时左右 Python 执行了大概 20 分钟

这个要看写法,实现相同功能,有的写法效率高,有的写法效率低。有的用 shell 实现方便,有的 python 实现方便。

比如字符串流式处理,文件操作多一些的,一般 shell 容易实现。但如果有 url 调用,post put 之类的数据还比较复杂还要有自动重试之类的,或者有复杂正则的,python 更方便一些。

总之要看情况。

还有环境依赖的 shell 和 python 其实差不多。
shell 下同一个工具比如 grep 来说,不同系统下可能是不同的版本,功能可能有些许差别。
python 更是了,首先是 python 版本就很难统一。然后是第三方包的版本也很难统一,总不能一个简单的脚本还要自带 virtualenv 吧。

另外一个是 debug ,这个个人感觉 python 脚本 debug 更方便一些。这应该是各巨大优势。
jorneyr
108 天前
不听建议,只听命令。
Canglin
108 天前
@baobao1270 #6 之前的 Shell 脚本是我们的乙方写的,我本人不会写 Shell ,只会一点 Python ,之前的 Python 也确实没有用三方包
yinmin
108 天前
遵循准则第一条:能用就别动。

sh 的很多指令都是一个可执行文件,跑 sh 脚本时会重复加载运行进程,有大量循环处理会慢一些。python 的库比较完善,如果开发新脚本可以考虑用 python 。

op 是运维,应该编程不是强项,但是懂一点编程,推荐目前地表最强 ai claude 3.5 sonnet ,500 行以下的程序绝对是编程高手中的高手。不同语言的转换也是一流的,你把 sh 给 ai 直接转成 python 。有一个技巧:提问前先打草稿,梳理需求分析很重要。你用了 claude 3.5 ,复杂脚本就不需要程序员打配合了。

claude 官网封号比较厉害,google cloud 可以申请 claude api 加一个壳就能用。也可以用二道贩子的平台。
Canglin
108 天前
@ho121 #13 业务场景主要是数仓的 ETL 过程,看了几个实践案例,Shell 与 Python 的都有,我个人还是比较倾向于 Python 的
l4ever
108 天前
当然可以, 只要你愿意.
yinmin
108 天前
python 用到第三方库,一定要建虚拟环境.env ,不同的程序用各自的虚拟环境。

网上搜索到的第三方库的使用代码,一定要上 pypi.org 看看是不是真开源,有多少人 star ,可不可靠。因为任何人都可以往 pip 里上传自己的库,要小心供应链攻击。
doublebu
108 天前
可能 PowerShell 也是一个不错的选择?毕竟可以用 dotnet 生态

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1061359

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX