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

1)标准输入、标准输出及标准错误输出的接口;

child.stdin 获取标准输入

child.stdout 获取标准输出

child.stderr 获取标准错误输出

2)获取子进程的PID:child.pid

提供生成子进程的方法:child_process.spawn(cmd, args=[], [options])

提供直接执行系统命令的方法:child_process.exec(cmd, [options], callback)

提供调用脚本文件的方法:child_process.execFile(file, [args], [options], [callback])

提供杀死进程的方法:child.kill(signal='SIGTERM')

1、利用子进程调用系统命令(获取系统内存使用情况)

新建nodejs文件,名为cmd_spawn.js,代码如下:

var spawn = require('child_process').spawn;

free = spawn('free', ['-m']);

// 捕获标准输出并将其打印到控制台

free.stdout.on('data', function (data) {

console.log('standard output:n' + data);

});

// 捕获标准错误输出并将其打印到控制台

free.stderr.on('data', function (data) {

console.log('standard error output:n' + data);

});

// 注册子进程关闭事件

free.on('exit', function (code, signal) {

console.log('child process eixt ,exit:' + code);

});

运行该脚本和直接运行命令'free -m'的结果,一模一样:

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

实例,要curl一下天气的接口返回json格式的数据。

新建nodejs文件,名为cmd_exec.js:

var exec = require('child_process').exec;

var 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的内容就是上面我curl出来的这个东西:

{"weatherinfo":{"city":"北京","cityid":"101010100","temp":"3","WD":"西北风","WS":"3级","SD":"23%","WSE":"3","time":"21:20","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB","njd":"暂无实况","qy":"1019"}}

*/

var data = JSON.parse(stdout);

console.log(data);

}

});

直接curl出来和通过运行脚本的出来的结果是一样一样的:

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

这个要先准备个shell脚本,比如我要连到一台服务器,来修改它的密码,则我要提供IP,user,new pwd,old pwd,新建shell脚本文件change_password.sh:

#!/bin/sh

IP=""

NAME=""

PASSWORD=""

NEWPASSWORD=""

while getopts "H:U:P:N:" arg #选项后面的冒号表示该选项需要参数

do

case $arg in

H)

IP=$OPTARG

;;

U)

NAME=$OPTARG

;;

P)

PASSWORD=$OPTARG

;;

N)

NEWPASSWORD=$OPTARG

;;

?)  #当有不认识的选项的时候arg为?

echo "含有未知参数"

exit 1

;;

esac

done

#先获取userid

USERID=`/usr/bin/ipmitool -I lanplus -H $IP -U $NAME -P $PASSWORD user list | grep root | awk '{print $1}'`

# echo $USERID

#根据userid来修改密码

/usr/bin/ipmitool -I lanplus -H $IP -U $NAME -P $PASSWORD user set password $USERID $NEWPASSWORD

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

复制代码代码如下:

var callfile = require('child_process');

var ip = '1.1.1.1';

var username = 'test';

var password = 'pwd';

var newpassword = 'newpwd';

callfile.execFile('change_password.sh',['-H', ip, '-U', username, '-P', password, '-N', newpassword],null,function (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]

'''

import sys

print u"脚本名:", sys.argv[0]

for i in range(1, len(sys.argv)):#这里参数从1开始

print u"参数", i, sys.argv[i]

准备一个nodejs文件来调用这个python脚本file_python.js:

var exec = require('child_process').exec;

var arg1 = 'hello'

var arg2 = 'jzhou'

exec('python py_test.py '+ arg1+' '+arg2+' ',function(error,stdout,stderr){

if(stdout.length >1){

console.log('you offer args:',stdout);

} else {

console.log('you don't offer args');

}

if(error) {

console.info('stderr : '+stderr);

}

});

py_test.py内容如下:

# -*-coding:utf-8 -*-

import sys

print sys.argv

运行结果如下:

shell脚本和python脚本和go脚本的区别_Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例-Go语言中文社区...相关推荐

  1. c语言代码中调用系统命令行.sh shell脚本,linux shell system传参

    C语言代码中调用命令行: 1. 使用system(" 命令行 ");    --  执行完命令行后,会返回原先C代码的位置,继续执行. 2. 如果命令行中需要传参,使用 sprin ...

  2. 【Groovy】闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )

    文章目录 一.闭包中调用 Groovy 脚本中的方法 二.owner 与 delegate 区别 三.闭包中调用 Groovy 对象中的方法 一.闭包中调用 Groovy 脚本中的方法 在 Groov ...

  3. mysql workbench导入sql_MySQL Workbench 导入sql脚本-Go语言中文社区

    最近一直在搞数据,数据量大了真的很头疼.特别是数据迁移,用的是insert的sql脚本. 导入数据方法一: 主页面上有这个按钮,意思是打开sql脚本.按钮如下: 点击按钮选择脚本: 选择脚本以后,打开 ...

  4. python语言中文社区-python解决中文

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! python 添加中文注释时出现运行失败. 需要在顶部设置编码. # coding ...

  5. python语言中文社区-python语言中文

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 为了得到一个可以正常返回的 url ,需要修改示例中的 secretid ...

  6. python语言中文社区-Python 之父谈 Python-Go语言中文社区

    在宣传海报上,Python 之父 Guido van Rossum 在 EuroPython 2015 会议的发言分为讲话稿和现场问答部分,但是他上台后将全程改为现场问答的形式.他在回答现场观众的问题 ...

  7. python第一周心得_python第一周心得-Go语言中文社区

    Python 简介 Python 作为一个近年备受好评的语言,它的一些优点让人无法忽视.Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.它的设计具有很强的可读性,相比其他 ...

  8. 给 python 初学者的四条忠告_给 python 初学者的四条忠告-Go语言中文社区

    1. 不要纠结于开发工具的选择,简单直接就是最好的 学习一种编程语言,首先要找一款合用的集成开发工具,似乎是自然而然的想法.为什么不呢?IDE可以自动补齐,可以一键运行,还可以断点调试.使用IDE开发 ...

  9. python和uipath区别_Uipath中调用Python的方法

    难度等级:初学者. 这篇文章将有助于在UiPath中使用Python活动(Activity),该活动允许从UiPath调用和执行Python脚本.不仅可以执行Python脚本,还可以将参数传递给Pyt ...

最新文章

  1. pap和chap交叉认证
  2. Keras入门(一)搭建深度神经网络(DNN)解决多分类问题 1
  3. 读写App.config配置文件的方法
  4. standard_init_linux.go:178: exec user process caused no such file or directory
  5. oracle tranc,ORACLE TRUNC()函数
  6. 万年历c语言编程代码_C语言高效编程与代码优化~
  7. 【1】MySQL的四种事务隔离级别
  8. 单价数量和总价的公式_人教版四年级数学上册单价、数量和总价之间的关系微课...
  9. fedora中linux改成英文,Fedora的英文界面下使用中文
  10. 微型计算机常常采用三种线结构,中北大学微机原理习题册终极版考试必备
  11. IDEA 对接口进行快速测试(Create Test)
  12. Android之在不同的Activity之间传递数据
  13. google三篇重要论文(英文原文)
  14. 银河麒麟桌面操作系统V10 SP1 如何安装字体
  15. matlab最小二乘法拟合 做图像,用MatLab画图(最小二乘法做曲线拟合)
  16. 用计算机弹出生僻字的歌,抖音生僻字是什么歌?抖音生僻字歌词注音完整版
  17. 零售药店计算机操作内容培训,零售药店gsp培训计划.doc
  18. JAVA语言程序设计教程张席_Java语言程序设计教程
  19. 作为投资者,这10个对冲策略你必须烂熟于心
  20. webpack之打包library

热门文章

  1. Spring Boot jackson配置使用详解
  2. java自定义注解实现日志功能
  3. Jackson用法详解
  4. cairo填充_Cairo 图形指南 (5) —— 形状与填充
  5. js 对象和构造函数
  6. java 虚基类_重拾C++之虚函数和虚基类以及抽象类
  7. 电气工程及其自动化学不学c语言,电气工程及其自动化学什么 就业方向有哪些...
  8. Spring bean 不被 GC 的真正原因
  9. java 文件流 重写_java中关于文件流的总结
  10. 哲学家就餐问题python_哲学家就餐-同步问题解析-python