1
somebody1 95 天前 18
凭你的描述和对问题探究的深度,不动是最好的
|
2
baobao1270 95 天前 via Android 3
首先建议公司用的话能动就别换
Python 的问题是,你不知道系统带的 Python 是什么版本,然后系统自带 Python 装包会污染系统的 python 环境 外部交互比较麻烦,以前一行搞定的事情现在要 subprocess 但是复杂的脚本用 Python 优势就很明显了,而且因为转义遇到的 bug 也少 |
3
skyrim61 95 天前
发出来看看, 不然大伙不知道, 注意规避敏感信息
|
4
lazyyz 95 天前 via Android
生产不动一般不会出问题!
业务既然能接受 14 小时,为什么要变呢? |
5
catsoul 95 天前 18
能用就别动
这种事情等着上级驱动,你做了才是完成本职工作 如果你自己擅自改了,做好了算是正常(无功无过),但凡一个脚本做出问题,导致哪怕一丁点生产事故,这锅你就牢牢焊死在背上吧,主动离职谢罪 |
6
baobao1270 95 天前 via Android 1
抽取 3000+文本文件中的特定条件的字符串到指定文件中,这个肯定是 python 很方便,用 shell 其实每一行都会新建进程,开销很大,python 是进程内部处理了
想要学习的话以后遇到新的这种纯文本转换/提取的任务,如果要写新的脚本的话,可以用纯 python 写,记得不要调外部包,加 type hinting |
7
fsdrw08 95 天前 via Android 2
不建议换,理由同 2 楼
即便真要换,也该换成 Ansible+Ansible runner |
9
Canglin OP @baobao1270 #2 是这样的,我就是个二把刀,平安县翻译的水平,我想请教一下什么样的脚本就可以算是复杂脚本了
|
13
ho121 95 天前 via Android
Shell 执行了 14 小时左右 Python 执行了大概 20 分钟
这个要看写法,实现相同功能,有的写法效率高,有的写法效率低。有的用 shell 实现方便,有的 python 实现方便。 比如字符串流式处理,文件操作多一些的,一般 shell 容易实现。但如果有 url 调用,post put 之类的数据还比较复杂还要有自动重试之类的,或者有复杂正则的,python 更方便一些。 总之要看情况。 还有环境依赖的 shell 和 python 其实差不多。 shell 下同一个工具比如 grep 来说,不同系统下可能是不同的版本,功能可能有些许差别。 python 更是了,首先是 python 版本就很难统一。然后是第三方包的版本也很难统一,总不能一个简单的脚本还要自带 virtualenv 吧。 另外一个是 debug ,这个个人感觉 python 脚本 debug 更方便一些。这应该是各巨大优势。 |
14
jorneyr 95 天前
不听建议,只听命令。
|
15
Canglin OP @baobao1270 #6 之前的 Shell 脚本是我们的乙方写的,我本人不会写 Shell ,只会一点 Python ,之前的 Python 也确实没有用三方包
|
16
yinmin 95 天前 via iPhone 3
遵循准则第一条:能用就别动。
sh 的很多指令都是一个可执行文件,跑 sh 脚本时会重复加载运行进程,有大量循环处理会慢一些。python 的库比较完善,如果开发新脚本可以考虑用 python 。 op 是运维,应该编程不是强项,但是懂一点编程,推荐目前地表最强 ai claude 3.5 sonnet ,500 行以下的程序绝对是编程高手中的高手。不同语言的转换也是一流的,你把 sh 给 ai 直接转成 python 。有一个技巧:提问前先打草稿,梳理需求分析很重要。你用了 claude 3.5 ,复杂脚本就不需要程序员打配合了。 claude 官网封号比较厉害,google cloud 可以申请 claude api 加一个壳就能用。也可以用二道贩子的平台。 |
18
l4ever 95 天前
当然可以, 只要你愿意.
|
19
yinmin 95 天前 via iPhone
python 用到第三方库,一定要建虚拟环境.env ,不同的程序用各自的虚拟环境。
网上搜索到的第三方库的使用代码,一定要上 pypi.org 看看是不是真开源,有多少人 star ,可不可靠。因为任何人都可以往 pip 里上传自己的库,要小心供应链攻击。 |
20
doublebu 95 天前
可能 PowerShell 也是一个不错的选择?毕竟可以用 dotnet 生态
|
21
loading 95 天前
如果你是运维,我建议是用 golang ,没有上面环境等问题。
但还是那句话,能用还是别动。 |
22
salmon5 95 天前
建议换成 go ,或者 rust
|
23
crackidz 95 天前
可行但没必要
|
26
noahlias 95 天前
什么 shell 脚本这么抽象要执行 14 个小时
shell 本身不就是调各种命令吗 严重怀疑 shell 脚本写的有问题 |
27
codingKingKong 95 天前 1
可以换, 前提是你能有可靠的测试手段和测试方案.
属于受累不讨好的工作量. 如果确实决定了, 那么请考虑以下三个方面: 1.调研清楚为什么要 A shell 脚本要这么写, 是否有业务限制? 2.从小到大, 从易到繁, 不要上来就去动最麻烦的那个, 不确定的不要动. 3.测试, 保证你修改后不能产生问题和引入新的问题, 其中比较麻烦的点在于边界处理. 例如, 某段 shell 代码隐含的处理逻辑会产生 a 数据结果, 替换为 python 后没有这样的效果, 导致预期行为改变. 剩下的, 就是慢慢的改, 建议每动一批之后, 留一些时间观察, 防止测试不到的事故集中爆发, 让你处理不过来. 祝好. |
28
sakeven 95 天前
如果是大规模机器上使用 python ,python 的环境问题远比 shell 要复杂,要换也是建议换成 go 、rust 之类的。
|
29
libook 95 天前 via Android
shell 主要用于调用其他指令处理的情况,Python/Perl 等主要用于对数据进行处理的情况,你可以混合使用,甚至必要情况下可以自己写 Go/Rust 程序来处理计算密集型或资源匮乏情况下的任务。
|
30
zictos 95 天前 via Android
python 肯定可以替代 shell 啊,写起来方便很多很多,不过已经写好的 shell 就暂时没必要换了。
重点体现在实现同样需求的代码量和简洁度,不过如果要优化速度,python 优化起来也会方便很多。执行外部命令用 subprocess 可能稍微麻烦点,代码行数可能多点,除非还是用 os.system 和 os.popen |
31
guanzhangzhang 95 天前
要看实现手段,之前腾讯有个论坛出了个奖金题目,处理一个 nginx 日志里 ip 信息,有用 perl 的,有用 python 的,有用 shell 的,最后第一名用时最短,大佬用了好多 shell 和 linux 黑科技
|
32
sleepybear1113 95 天前
这不一个降本增效、提升自己存在感的机会来了嘛?先不动就不动,然后打报告,说要用 Python 优化 xx 个慢 shell ,提高性能 xx%,然后写进 OKR 里面。慢 SQL 改起来费劲,但是这个应该会好很多吧。带上 GPT 写起来更加方便,就是优化的话,可不能把原来的正常的搞崩了。
|
33
codersdp1 95 天前
@sleepybear1113 可能一个不小心就是增笑了。
|
34
ckloy 95 天前
强烈建议先 review 下 Shell 脚本
|
35
Emiya1208 95 天前
有些东西不怎么需要性能,shell 脚本搁在那不出意外能兼容当前 +- 10 年的发行版,python 脚本放在这儿,Python 3.9 写出来的东西不一定能在 Python 3.6 上 run 起来。
我经常在某些特定的环境写 python 运维脚本,写的不怎么优雅,这不是能力问题,因为很多时候我必须被环境缚手缚脚(完全只使用 python 标准库来写脚本) |
36
wu67 95 天前 1
生产尽量不动. bash 能跑就不 zsh, shell 能用就不 py. 等到负责人受不了了再搞, 炸了也有人一起扛雷
|
37
naythefirst01 95 天前
生产环境先稳定再高效 如果不是十分有把握 最好不要自己找锅背
|
38
Emiya1208 95 天前
补充一下 即便是 go 或是 rust ,也可能在某些特定的残疾环境上运行出现问题。所以,某些场景下,perl 甚至还有用武之地,虽然这东西我看不懂。
|
39
AAAAAAAAAAAAAAAA 95 天前
生产环境怎么统一管理的,可以统一的话可以试,需要先立项,比如能给你领导或者领导的领导写一页 PPT 那种,提高了多少效率之类的,然后从上往下执行。
|
40
baobao1270 95 天前
@Canglin 还是看个人感觉吧,比如你这个替换 3000+文本个人认为算复杂的。还有大量文本模板填充之类,配置文件生成,不是简单的 grep / awk 就能处理的日志分析之类的。
|
41
Canglin OP @baobao1270 #40 你想复杂了,就是很简单的抽一行字符串然后写到新的文件中
|
43
langhuishan 95 天前
能动就别换,让我想起了切尔诺贝利
|
44
vialon17 95 天前
可以试试 lua
|
45
ospider 95 天前
重构、换语言本质上是公司内部的政治运动。你考虑下是不是你这个级别能推得动的吧。
|
48
meeop 95 天前
做了公司有奖励就干,做了没奖励就不干
|
49
Adonis142857 95 天前
能用就别动
|
50
tingyunsay 95 天前
又不是不能用.jpg
|
51
mark2025 95 天前
替代 shell 脚本可以考虑 TypeScript:安装 nodejs ,和 tsx ,用 tsx 直接执行 ts 脚本,即实现 js 灵活也能有类型保护。
|
52
enihcam 95 天前
“Shell 执行了 14 小时左右”
是一天执行一次,还是一年执行一次?你倒是说啊! 一天执行一次? 先写 Python 和测试用例——》 Shell 和 Python 双跑一个月——》迁移( Shell 做 fallback 方案一年)+ 向上汇报拿奖金。 一年执行一次? 洗洗睡吧。 |
53
artiga033 95 天前 via Android 1
非要说替换 shell ,我觉得也是 ruby/perl 优先于 python
|
54
duzhuo 95 天前
不同 python 版本都不一定兼容 还是蒜了吧
|
55
Puteulanus 95 天前
我也觉得不如用 golang ,速度可能更快,没有环境问题,而且你管理的服务器跑着一堆二进制程序完全是黑盒,防裁员利器(狗头
|
57
james122333 95 天前 via Android
这应该是写不好 首先 shell 并不是每行新建进程
全使用内建命令效能还可以 写到 14 小时有点多 但效能还是会低于 python 因为 shell 是每行解释执行的 本身就不适合处理数据 需要效能可直接调用外部专门处理数据的工具(如三剑客)并将其一并处理不建立额外进程 当然怎么做依照经验 shell 本身强在注重状态 可以容易写流程与调用 |
58
xgdgsc 95 天前
|
59
lolizeppelin 95 天前
|
60
lolizeppelin 95 天前
@artiga033
....你听说过 perl 的笑话么..... 还用 perl 笑死..perl 要是靠谱根本没 python 在系统里的立足之地 ruby 还 tm 有人用么现在..瞎出主意,楼上居然还有说用 lua 的.. 要么 shell 要么 python 要么 golang |
61
lolizeppelin 95 天前
楼主你也不要想着全换...把脚本和模块一样分类..看看那些是系统无关的..哪些纯字符串处理的
确定好功能后,影响小的、适合换其他语言的就换,不适合的就不换,别想着全干掉 脚本.sh 后缀没意义的,里面直接是个 python 或者直接是二进制文件都可以 完全可以做到不改脚本名替换代码 |
62
vvhy 95 天前 1
唉,看到前排真的很感慨,知道大家说得有道理,但是很难接受
|
63
SimonOne 95 天前
首先 import os🙈
|
64
Heo 95 天前
新写的用 python ,以前写的维持 shell
|
65
akin520 95 天前
能用不动
|
66
jim9606 95 天前 via Android
如果能保证只使用 python3 不兼容 2,并且忍住不用任何第三方库,还是不错的。
建议只迁移数据处理的部分,例如 http 收发,修改 json,数值计算之类的,通过 argparse 将参数暴露给流程控制的 sh |
67
poporange 95 天前
公司的脚本,就别乱动了吧,万一你一个没改好,不纯纯自己给自己找事儿。
|
69
tomemi 95 天前
python 环境坑太多
|
70
yougg 95 天前
1000+Shell 脚本 是为了应对多少不同的环境和复杂场景才积累出来的数量? 你是怎么想象出来随便就能用胶水语言搞定这些环境和场景的?做一个合格的运维就老老实实拿起《高级 Bash 脚本编程指南》啃透了然后直接去解决你提到的性能问题,少在哪折腾胶水在不同版本的存在的一堆兼容性问题。
|
71
ytmsdy 95 天前
1000+的 shell 脚本,这也算是搞复杂性项目了,没事别乱动,搞炸了搞不好你就能直接 N+1 了。
这么多的定时任务,公司其实是需要从系统级别来搞了 |
72
McreeWu 95 天前
@lolizeppelin #60 赞同,简单的用 shell ,复杂点的用 python ,有能力用 golang 。
|
73
dddd1919 95 天前
立新不破旧
|
74
wanniwa 95 天前
你可以以后新加的脚本换成 python ,以前的都不动
|
75
forQ 95 天前
既然不会写 shell ,只会一点 python ,那就什么都别动
|
77
shyangs 95 天前 2
不會 Shell 你是改寫不了舊的 shell script 為 python 的, 別搞出生產事故了.
|
78
VYSE 95 天前
替换 sh, python 不加-u 肯定要被坑
|
80
yufeng0681 95 天前
@lolizeppelin #61 做事情有调理,点赞!
题主已经有想法了,评论家们都一边倒的不建议动, 他们是安全第一。 题主要想晋升,就必须在常规工作外有亮点的绩效,这个一千个脚本就是意外工作可能的亮点。 1 、 先把 1000 个脚本分类, 把非系统运营用的脚本筛出来, 写 ppt 告诉领导隐患,改进办法,你的实际改造效果(其中 1~2 个案例),由领导拍板后续思路。 2 、基于这些个非系统运营脚本,对你们公司业务进行抽象,看看能不能找到更好的集成工具,对这一类需求能搞个类似低码平台的方式,轻轻松松做出来,开发成本,运行效率,维护成本等方面都能极大改善 [这是另外一个 ppt] , 这个做出来或者汇报出来,估计就能成为你下一阶段的专项工作,也能获得卓越绩效 |
81
levelworm 95 天前 via Android
复杂的脚本可以试试看。
|
82
iorilu 95 天前
14 小时?
脚本写的有问题把, 脚本也是调用一些工具 awk 之类的, 这些工具本身并不慢 |
83
my3157 94 天前
个人经验, 一般避免 shell 脚本超过 60 行, 时间长了累计大量的 shell 脚本维护起来太困难了
|
84
qaq44566 94 天前
最近尝试用 lua 替代 shell ,目前已经能实现一个进程中 lua 调用 shell 的函数,shell 调用 lua 的函数,不过还需要一些工作
(不是推荐群主换,我自己有个 3000 行的脚本想重构 [https://github.com/qaqland/dotlua]( https://github.com/qaqland/dotlua) |
85
mylovesaber 94 天前
楼主可否详细点介绍下 [抽取 3000+文本文件中的特定条件的字符串到指定文件中] 的情况?有点好奇想测试下效果,有 demo 吗? shell 理论上没这么慢吧,各种文件中都有多少内容啊?
|
86
qzydustin 94 天前
个人项目就换了,公司项目...emmm...有什么必要嘛。
|
87
lanlanye 94 天前
系统里本来就有很多不同的脚本,除了 shell 的一般至少还会有一些 Perl 和 Python 的,偶尔还有一些 Lua 和 Ruby 的。
我倾向于在系统预装的里面选一个自己比较熟练的。 |
88
mayli 94 天前
除非有明显优势,或者你就是纯想学习,否则没必要。
|
90
Tink 94 天前
什么项目需要用到 1000+shell 脚本。。
|
91
javak 94 天前
想见识一下 python 怎么把 shell 14 小时的功能优化到 20 分钟的。op 可以把敏感信息砍掉
|
92
shaozelin030405 94 天前
1. 可以
2. 自己学自己写 3. 别动生产,到时候出了问题别睡觉了 |
93
jackmod 94 天前
没事别在大规模系统上用 python 。你自己锁版本了,不代表依赖的包会锁,也不代表依赖的依赖会不会严格遵循版本号。
给自己和自己的小组写的工具无所谓用什么。 |
95
aloxaf 94 天前
1000+ shell 脚本,你敢动这坨屎山?……
还有 3000+ 文本文件的字符串提取怎么会这么慢,你们难道每个字符串 x 每个文件都 grep 一次? |
96
vx7298 94 天前
就这点数量,还不够塞牙缝,以前就不说了,现在我已经把所有脚本统一用 gpt 转换为 golang 了,简直不要太爽了,shell 脚本的一个主要问题是,轻易不写,写的时候,查半天,熟练了,然后又停很久,全忘完,蛋疼,只有运维才天天写这玩意
|
97
jenson47 94 天前
第一:从工作量来看,这个需要很多时间,建议不要个人操刀,要上面下任务再去弄,不然费时费力,出事还背锅。
第二:一般情况下,如果对项目不熟,能跑就别动,而且你的脚本还不少。如果硬是要搞,最起码先调查下各个系统情况,比如 python 版本 第三:失败补偿方案要跟上,此外如何边开发边验证,还有就是 python 扩展包管理 [方便机器移植] |
98
james122333 93 天前 via Android
|
99
novaline 93 天前
既然问的这么宽泛,答案很简单:Yes, you can
|
100
magine 88 天前
第一个问题:给你钱吗?不给钱不要承担责任。
如果自己练手,可以写,但永远不要上线。 |