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

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

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

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

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

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

总之要看情况。

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

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

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

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

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

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

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

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

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

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

© 2021 V2EX