曾经 python 是 shell 脚本之外运维服务器的首选语言
现在 node 有着更容易运维的运行时环境,更方便的包管理模式
是否意味着 node 能替代 python 作为运维脚本的选择之一呢?
1
panda1001 2019-08-22 20:21:51 +08:00 via Android
预装环境 shell>python>node
|
2
singerll 2019-08-22 20:22:47 +08:00 via Android 1
1、每个机器自带 python。2、不是写个脚本就叫自动化运维
|
3
mhycy OP |
4
ETiV 2019-08-22 20:56:01 +08:00
我能用 shell 的都用了 bash …
我用 nodejs 的时候遇到过一类问题,child_process.spawn 的 on-exit 和 stdout/stderr.on-data 的调用次序并不能保证 发生过子进程 exit 了,但是收到的 stdout 的内容不完整,导致没法解析子进程的输出内容 所以跟 nodejs 比,Python 的优势还是在的…(但是我并不会 Python ) |
5
airyland 2019-08-22 20:56:34 +08:00
我一直是这样用的,主要原因是 node 写起来更方便。
|
6
k9982874 2019-08-22 21:02:34 +08:00 via iPad
我选择 python
|
7
singerll 2019-08-22 21:07:59 +08:00 via Android
@mhycy 你最后一句不是要替代 Python 吗。Python 就是干这个的。而且还有各种成熟的自动化软件也是依赖 python。。
|
11
cubecube 2019-08-22 22:09:19 +08:00 via Android
在公司内部,推动所有环境的服务器都部署一个特定的软件,需要很大的能量才能完成。开发视角和运维视角很不同的
|
12
Symo 2019-08-22 22:12:00 +08:00
主要还是生态 python 已经做得足够好了. shell 其实还是有些跨发行版不一致的情况.
|
13
jaskle 2019-08-22 22:14:07 +08:00 via Android
哪个简单用哪个
|
14
panda1001 2019-08-22 22:23:28 +08:00 via Android
@mhycy 并不是特指自动化运维,选 shell 和 python2.6 是有预装环境的优势,如果考虑配环境的话,我觉得 go 比 node 还更有优势
|
15
hcymk2 2019-08-22 22:26:06 +08:00 via Android
怎么不选 ruby 呢
|
16
coolair 2019-08-22 22:40:34 +08:00 via Android
装个 node 都觉得恶心
|
17
echo1937 2019-08-22 23:02:04 +08:00 1
@mhycy #3
脚本这块,现在有三种方向: 1. 传统型,基本上都是 shell > python > 其他, 2. 类似 ansible 之类的 playbook ; 3. docker/k8s, Python 的版本问题,已经度过了最困难的时候, Py2 现在已经接近 EOS,连最老旧的 RHEL/CentOS 在 8 版本都默认 Py3 了, 影响脚本语言流行度很重要的两个问题是: 1. 要比前辈足够优秀,比如 python 之于 bash,它增强了非常多,但是 node 之于 python 并没有那么大优势; 2. 流行度,在目前的服务器领域,真的很少有运维去学 node,因为真的不太用得到; |
18
Osk 2019-08-22 23:02:31 +08:00 2
我来歪个楼,powershell
主要是管道传递的是对象真的太方便了,虽然我没仔细学过 powershell,但我自己靠 Google 写过几个脚本,真的太爽了。 shell 里面|传递文本,后面的命令得考虑下前一个命令的输出格式,python/js 里面怕是没有|,虽然可以获得返回的列表 /对象也挺好的但感觉没管道爽。 举个例子: powershell 里面显示网卡的 ip,筛选条件是公司局域网地址 ```ps1 >>> Get-NetIPAddress |? {$_.IPAddress -like "10.*"}| ft -Property IPAddress,InterfaceAlias IPAddress InterfaceAlias --------- -------------- 10.1.1.28 Wi-Fi ``` 看起来 powershell 的命令又臭又长, 但是,全程 tab 补全,我根本没记忆过参数和 cmdlet 的全称,最牛的是|后面的 cmdlet 居然能补全前一个命令的输出!!!! 希望 ms 加把力,以后 linux 上也能有完善的 powershell 也是不错的 不知道各位怎么看 powershell,我觉得也是挺优秀的,准备学习下 |
19
Osk 2019-08-22 23:03:43 +08:00 1
顺便 node_modules 真的是噩梦,太多小文件了,崩溃
|
20
tomczhen 2019-08-22 23:29:02 +08:00 via Android 1
可以,自己用的话没所谓,PHP,Ruby 也一样可以。
但是 Python 的优势很大,首先发行版自带解释器,其次 Python 标准库功能很多,最后一些需要编译的库大多数发行版都有二进制分发,通过包管理器即可安装。 如果使用环境默认就有 nodejs,人员也足够熟悉,那么用 nodejs 也合乎情理。但是从大环境看,要解决的问题很多,也不存在只能用 nodejs 才能解决痛点。 |
21
mhycy OP @panda1001
@echo1937 @tomczhen 感谢三位的详细回复。 我突然冒出这个想法其实是因为最近用 node 写了个用于对接 routeros api 的包 完事了之后在想如果是 python 我会怎么弄... 于是就冒出了这么个问题... 感受上,node 的包管理器相比于 PyPI 来说有着更丰富的私有库方案可供选择 而命名上的私有域概念也能很好的把私有代码与公有库隔离开来,模块化上比 python 好处理 从这点上说我是觉得用 node 来替代 python 做粘合剂没什么不妥的情况 PS. node_modules 小文件噩梦,但版本隔离也是个优点,现在磁盘不值钱 另:感觉跟 shell 扯上关系的脚本语法上都不怎么友好。。。 |
22
msg7086 2019-08-23 11:54:47 +08:00
说得挺有道理的,所以我用 Ruby 做运维……
|
23
julyclyde 2019-08-23 15:16:35 +08:00
我只想说“你们 js 界”请不要拿着锤子看啥都像钉子
|
24
artandlol 2019-08-23 16:46:07 +08:00 via Android
挺有道理的,所以我用 golang
|
25
c1462066778 2023-09-22 13:45:41 +08:00
实在受不了 Python 的自动补全,就是一坨 x 。node 至少还能写 ts 增强一下补全功能。Python 的那个类型,有几个人写,又有几个第三方库大量在用。感觉 py 太动态了。但是用 ansible 的时候还是避免不了用 Python ,做数据分析的时候也避免不了 pandas numpy ,深度学习的时候也避免不了 pytorch ,最烦的就是要在运行的时候打 type()才知道类型,写的太累了。list map filter 也不太受得了,为啥不做成类上面的方法。js 还好可以用 Promise 勉强做成链式调用,或者等新规范完善之后可以直接用|>来链式调用,也有想能不能 java 来做,java 还是太束缚手脚了,小脚本里面不太适合
|