手机版

在Nodejs中调用系统命令、Shell脚本和Python脚本的方法和示例

时间:2021-10-15 来源:互联网 编辑:宝哥软件园 浏览:

每种语言都有自己的优势,相互结合在一起就有自己的优势。程序执行效率更高,或者哪种实现方法更简单。nodejs使用子进程来调用系统命令或文件。文件见http://nodejs.org/api/child_process.html。NodeJS子流程提供了与系统交互的重要接口。它的主要API有:标准输入、标准输出和标准错误输出接口。

NodeJS子流程提供了与系统交互的重要接口,其主要API有:

标准输入、标准输出和标准误差输出接口。

Child.stdin获取标准输入child.stdout获取标准输出child.stderr获取标准错误输出获取子进程的PID:child . PID提供生成子进程的方法:child _ process.spawn (cmd,args=[],[options])提供直接执行系统命令的方法:child _ process.exec (cmd,[options],回调)提供调用脚本文件的方法:child _ process.execfile (file,[args],[options],回调)提供终止进程的方法:child . kill(SIGTERM)。

用例子感受一下,很有意思,呵呵~ ~

1.使用子进程调用系统命令(获取系统内存的使用情况)。

新建一个名为cmd_spawn.js的nodejs文件,代码如下:复制代码如下: var spawn=require(' child _ process ')。产卵;free=产卵(' free ',['-m ']);

//捕获标准输出并打印到console free.stdout.on ('data ',function(data){ console . log(' standard output 3360 \ n ' data);});

//捕获标准错误输出并将其打印到控制台free.stderr.on ('data ',function (data) {console.log('标准错误输出: \ n ' data);});

//注册子进程关闭事件free.on ('exit ',函数(代码,信号){console.log('子进程eixt,exit : '代码);});

以下是运行脚本和直接运行命令“free -m”的结果,二者完全相同:

2.执行系统命令(child_process.exec())。

我还是很经常用这个,感觉功能比上面那个强一点。例如,我非常喜欢关注天气。现在我想卷曲天气界面,以json格式返回数据。也许我要对它做一些操作,但在这里打印出来,不要操作。

创建一个名为cmd_exec.js:的新nodejs文件

复制的代码如下: var EXEC=REQUIRE(' child _ process ')。EXECvar cmdStr=' curl http://www.weather.com.cn/data/sk/101010100.html'; exec(cmdStr,function(err,stdout,stderr){ if(err){ console . log(' get weather API error : ' stderr);} else {/*这个stdout的内容就是我上面卷曲出来的:{ '天气信息' : {'city' :' Beijing ',' cityid' :' 1010100 ',' temp' :' 3 ',' wd' 3330 '。Sd' :' 23% ',' wse' :' 3 ',' time' :' 21:20 ',' israd' :' 1 ',' radar' :' JC _ radar _ az9010 _。console.log(数据);}});

让我们感觉直接卷曲的结果与运行脚本的结果相同:

3.调用传递参数的shell脚本(child_process.execFile())。

例如,要准备一个shell脚本,如果我想连接到一个服务器以更改其密码,我将提供IP、用户、新pwd、旧pwd,并创建一个新的shell脚本文件change_password.sh:

复制代码如下:#!/bin/sh

IP=' NAME=' PASSWORD=' new PASSWORD=' '

而getopts ' H : u 3360 p 3360n 3360 ' arg #选项,其后面的冒号表示该选项需要参数do case $ arg in H)IP=$ OPTARG;u)NAME=$ OPTARG;p)PASSWORD=$ OPTARG;n)new password=$ OPTARG;)# arg是当有你不知道的选项时?“Echo”包含未知参数“exit 1;esacdone

#首先获取USERID USERID=`/usr/bin/IPMI tol-I lanplus-H $ IP-U $ NAME-P $ PASSWORD user list | greplot | awk“{ print $ 1 }”` # echo $ USERID #根据USERID/usr/bin/IPMI tol-I lanplus-H $ IP-U $ NAME-P $ PASSWORD更改密码用户设置密码$USERID $NEWPASSWORD

然后我准备了一个nodejs文件来调用这个shell脚本,叫做file_changepwd.js:

复制代码如下: var call file=require(' child _ process ');var IP=' 1 . 1 . 1 . 1 ';var username=' testvar password=' pwdvar newpassword=' newpwd

call file . exec file(' change _ password . sh ',['-H ',ip,'-U ',用户名,'-P ',密码,'-N ',newpassword],null,函数(err,stdout,stderr) { callback(err,stdout,stderr);});

在这里贴跑步成绩不方便,但我可以用我的个性向你保证,已经测试过了。

看完以上,调用python脚本没有悬念,本质上就是执行命令。

4.调用python脚本(python脚本本身传递参数)。

在这里插一句题外话。以下段落是python参数的简要说明:

复制的代码如下:# -*-coding:utf-8 -*-' '必需模块:sys参数个数:len(sys.argv)脚本名:sys.argv[0]参数1: sys.argv [1]参数2: sys.argv [2]' '。Sys。范围(1)中I的argv[0 ], len(sys。argv)) : #这里,参数从1开始,打印u' parameters ',I,sys.argv[i]。

运行结果:

我还将准备一个nodejs文件来调用这个python脚本(我修改了py_test.py,见下文),file_python.js:

复制的代码如下: var EXEC=REQUIRE(' child _ process ')。EXECvar arg 1=' hello ' var arg 2=' jzhou ' exec(' python py _ test . py ' arg 1 ' ' arg 2 ' '),函数(error,stdout,stderr){ if(stdout . length 1){ console . log('您提供了args: ',stdout);} else { console.log('您不提供参数');} if(错误){ console . info(' stderr : ' stderr);}});

py_test.py内容如下:#-*-coding : utf-8-*-import sysprintsys . argv。

运行结果如下:

挺好的,2014年完成了一篇精美的博客。哈哈~ ~

版权声明:在Nodejs中调用系统命令、Shell脚本和Python脚本的方法和示例是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。