各言語には独自の利点があります。それは互いに独自の強みを組み合わせて、プログラムをより効率的に実行するか、どの実装方法がより単純なかを使用します。 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]、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(code、signal){
console.log( '子プロセスeixt、exit:' + code);
});
スクリプトを実行し、コマンド「Free -M」を直接実行した結果、まったく同じです。
2。システムコマンドを実行する(child_process.exec())
私はまだこれを非常に頻繁に使用していますが、関数は上記よりも少し強力に感じられます。たとえば、私は天気に注意を払うのが好きです。次に、Weather Interfaceをカールして、JSON形式でデータを返したいと思います。たぶん私はそれを操作したいのですが、私はそれをここに印刷し、操作しません。
cmd_exec.jsという名前の新しいnodejsファイルを作成します:
コードコピーは次のとおりです。
var exec = require( 'child_process')。exec;
var cmdstr = 'curl http://www.weather.com.cn/data/sk/1010100.html';
exec(cmdstr、function(err、stdout、stderr){
if(err){
console.log( '天気APIエラーを取得:'+stderr);
} それ以外 {
/*
このstdoutの内容は、私が上でカールするものです:
{"heatherinfo":{"city": "beijing"、 "cityid": "101010100"、 "temp": "3"、 "wd": "Northwest Wind"、 "ws": "level 3 "、" sd ":" 23% "、" wse ":" 3 "、" time ":" 21:20 "、" isradar ":" 1 "、" radar ":" jc_radar_az9010_jb "、" njd ":" no live "、" qy ":" 1019 "}}}
*/
var data = json.parse(stdout);
console.log(data);
}
});
カールの結果を直接体験しましょう。スクリプトを実行しても同じです。
3.パラメーターを渡すシェルスクリプト(child_process.execfile())を呼び出す
このために、最初にシェルスクリプトを準備する必要があります。たとえば、パスワードを変更してサーバーに接続する場合は、IP、ユーザー、新しいPWD、古いPWDを提供し、新しいシェルスクリプトファイルchange_password.shを作成する必要があります。
コードコピーは次のとおりです。
#!/bin/sh
ip = ""
name = ""
パスワード= ""
newPassWord = ""
一方、getopts "h:u:p:n:" arg#オプションの後のコロンは、オプションにパラメーターが必要であることを示します
する
ケース$ argin
h)
ip = $ optarg
;;
u)
name = $ optarg
;;
p)
パスワード= $ optarg
;;
n)
newPassWord = $ optarg
;;
?)#あなたが認識していないオプションがあるのはいつですか?
エコー「不明なパラメーターが含まれています」
終了1
;;
ESAC
終わり
#get userid最初
userid = `/usr/bin/ipmitool -i lanplus -h $ ip -u $ name -p $パスワードユーザーリスト|グレップルート| awk '{$ 1を印刷}' `
#echo $ userid
#UserIDに従ってパスワードを変更します
/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 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){
コールバック(err、stdout、stderr);
});
ここに実行されている結果を投稿するのは便利ではありませんが、個性を使用してテストされていることを確認できます。
上記を読んだ後、実際にはPythonスクリプトを呼び出すサスペンスはありません。これは、基本的にコマンドを実行しています。
4。Pythonスクリプトを呼び出します(Pythonスクリプト自体がパラメーターを渡す)
これが気晴らしです。次の段落は、Pythonで渡されたパラメーターの簡単な説明です。
コードコピーは次のとおりです。
# - * - コーディング:UTF-8-* -
'' '
必要なモジュール:sys
パラメーターの数:len(sys.argv)
スクリプト名:sys.argv [0]
パラメーター1:sys.argv [1]
パラメーター2:sys.argv [2]
'' '
sysをインポートします
print u "スクリプト名:"、sys.argv [0]
範囲(1、len(sys.argv))のiの場合:#パラメーターは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( 'あなたはargsを提供する:'、stdout);
} それ以外 {
console.log( 'you don/' t offer args ');
}
if(error){
console.info( 'stderr:'+stderr);
}
});
py_test.pyの内容は次のとおりです。
# - * - コーディング:UTF-8-* -
sysをインポートします
sys.argvを印刷します
操作結果は次のとおりです。
それはかなり良いです、そして私は2014年の絶妙なブログを完成させました。ハハ~~