Nodejs_node.js でシステム コマンド、シェル スクリプト、Python スクリプトを呼び出す方法と例

WBOY
リリース: 2016-05-16 16:22:43
オリジナル
3038 人が閲覧しました

各言語には、それぞれ独自の利点があります。相互に組み合わせると、プログラムはより効率的に実行され、Nodejs は子プロセスを使用してシステム コマンドまたはファイルとドキュメントを呼び出します。 nodejs.org/api/child_process.html。NodeJS 子プロセスは、システムと対話するための重要なインターフェイスを提供します: 標準入力、標準出力、および標準エラー出力のインターフェイス。

NodeJS 子プロセスは、システムと対話するための重要なインターフェイスを提供します。

標準入力、標準出力、および標準エラー出力のインターフェイス

child.stdin は標準入力を取得します

child.stdout は標準出力を取得します
child.stderr は標準エラー出力を取得します
子プロセスの 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. 子プロセスを使用してシステムコマンドを呼び出す (システムメモリ使用量を取得する)

次のコードを使用して、cmd_spawn.js という名前の新しい nodejs ファイルを作成します。


コードをコピー コードは次のとおりです:
var spawn = require('child_process').spawn;
free = spawn('free', ['-m']);
// 標準出力をキャプチャしてコンソールに出力します

free.stdout.on('data', function (data) {
console.log('標準出力:n' データ); });

// 標準エラー出力をキャプチャし、コンソールに出力します

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

console.log('標準エラー出力:n' データ); });

//子プロセスのシャットダウンイベントを登録します
free.on('exit', function (コード, シグナル) {

console.log('子プロセス eixt ,exit:' コード); });




以下は、このスクリプトを実行した結果とコマンド 'free -m' を直接実行した結果であり、まったく同じです:

2. システムコマンド (child_process.exec()) を実行します

私は今でもこれを頻繁に使用していますが、その機能は上記のものよりも少し強力だと感じます。たとえば、天気に注目したいのですが、天気インターフェースをカールして、データを JSON 形式で返す必要があるため、操作はせずに印刷します。

cmd_exec.js という名前の新しい nodejs ファイルを作成します:

コードをコピーします

コードは次のとおりです: 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('天気 API エラーの取得:' stderr);
} else {
/*
この標準出力の内容は、上で要約したものです:
{"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(データ);
}
});



直接カールした結果とスクリプトを実行した結果が同じであることを感じてみましょう:

3. パラメータを渡してシェル スクリプトを呼び出します (child_process.execFile())

これには、最初にシェル スクリプトを準備する必要があります。たとえば、サーバーに接続してパスワードを変更する場合は、IP、ユーザー、新しいパスワード、古いパスワードを指定して、新しいシェル スクリプト ファイルchange_passwordを作成する必要があります。 .sh:

コードをコピー

コードは次のとおりです:

#!/bin/sh

IP=""
名前=""
パスワード=""
NEWPASSWORD=""

while getopts "H:U:P:N:" arg #オプションの後のコロンは、オプションにパラメーターが必要であることを示します
する
case $arg in
は)
IP=$OPTARG
;;
う)
名前=$OPTARG
;;
P)
PASSWORD=$OPTARG
;;
N)
NEWPASSWORD=$OPTARG
;;
?) #認識されないオプションがある場合、引数は?
echo "不明なパラメータが含まれています"
1番出口
;;
esac
完了

#最初にユーザー ID を取得します
USERID=`/usr/bin/ipmitool -I lanplus -H $IP -U $NAME -P $PASSWORD ユーザー リスト | awk '{print $1}'`
# エコー $USERID
#ユーザーIDに基づいてパスワードを変更
/usr/bin/ipmitool -I lanplus -H $IP -U $NAME -P $PASSWORD ユーザー設定パスワード $USERID $NEWPASSWORD

次に、このシェル スクリプトを呼び出すための file_changepwd.js という Nodejs ファイルを準備します。

コードをコピーします コードは次のとおりです:

var callfile = require('child_process'); var ip = '1.1.1.1';
var ユーザー名 = 'テスト';
var パスワード = 'pwd';
var newpassword = 'newpwd';
callfile.execFile('change_password.sh',['-H', ip, '-U', ユーザー名, '-P', パスワード, '-N', newpassword],null,function (err, stdout) 、標準エラー出力) {

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]
''
インポートシステム
print u"スクリプト名:", sys.argv[0]
for i in range(1, len(sys.argv)): #ここでのパラメータは 1 から始まります
u"パラメータ", i, sys.argv[i]
を出力します

実行結果:

この Python スクリプトを呼び出すための nodejs ファイルも準備します (py_test.py に変更を加えました。以下を参照)、file_python.js:

コードをコピー コードは次のとおりです:

var exec = require('child_process').exec;
var arg1 = 'こんにちは'
var arg2 = 'jzhou'
exec('python py_test.py ' arg1 ' ' arg2 ' ',function(error,stdout,stderr){
If(stdout.length > 1){
console.log('あなたが提供する引数:',stdout);
} else {
console.log('引数を提供していません');
}
If(エラー) {
console.info('stderr : ' stderr);
}
});

py_test.py の内容は次のとおりです:
# -*-coding:utf-8 -*-
インポートシステム
print sys.argv

実行結果は次のとおりです:

相変わらずとても良くて、2014年も素晴らしいブログが完成しました。はぁ~~

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!