<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
每種語言都有自己的優勢,互相結合起來各取所長程式執行起來效率更高或者說哪種實現方式較簡單就用哪個,nodejs是利用子程序來呼叫系統命令或者檔案,檔案見http://nodejs.org/api/child_process.html,NodeJS子程序提供了與系統互動的重要介面,其主要API有: 標準輸入、標準輸出及標準錯誤輸出的介面。
NodeJS 子程序提供了與系統互動的重要介面,其主要 API 有:
用範例來感受一下,很有意思的,呵呵~~
新建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'的結果,一模一樣:
這個我還是很常用的,功能感覺比上面的強大那麼一點點。比如我很喜歡關注天氣,現在我要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出來和通過執行指令碼的出來的結果是一樣一樣的:
這個要先準備個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指令碼就沒什麼懸念了,本質上也就是執行命令。
這裡插入一個題外話,下面這段是對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指令碼(我對py_test.py做了修改,見下面),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
執行結果如下:
到此這篇關於node.js呼叫指令碼(python/shell)和系統命令的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45