각 언어에는 고유 한 장점이 있습니다. 프로그램을보다 효율적으로 실행하거나 어떤 구현 방법이 더 간단한 지에 대한 고유 한 강점을 결합합니다. 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 = [], [옵션]).
시스템 명령을 직접 실행하는 메소드 제공 : child_process.exec (cmd, 옵션], 콜백)
스크립트 파일을 호출하는 메소드를 제공합니다.
과정을 죽이는 방법을 제공합니다 : child.kill (신호 = 'sigterm')
예제를 사용하여 경험하는 것은 매우 흥미 롭습니다. 하하 ~~
1. 하위 프로세스를 사용하여 시스템 명령을 호출하십시오 (시스템 메모리 사용 가능).
cmd_spawn.js라는 새 nodejs 파일을 만듭니다. 코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
var spawn = 요구 ( 'child_process'). spawn;
free = spawn ( 'free', [ '-m']);
// 표준 출력을 캡처하여 콘솔에 인쇄합니다.
free.stdout.on ( 'data', function (data) {
console.log ( '표준 출력 :/n' + data);
});
// 표준 오류 출력 캡처 및 콘솔에 인쇄
free.stderr.on ( 'data', function (data) {
console.log ( '표준 오류 출력 :/n' + data);
});
// 어린이 프로세스 종료 이벤트 등록
free.on ( '종료', 함수 (코드, 신호) {
Console.log ( '아동 프로세스 eixt, 종료 :' + 코드);
});
다음은 스크립트를 실행하고 '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);
} 또 다른 {
/*
이 stdout의 내용은 위의 컬링입니다.
{ "WeatherInfo": { "City": "Beijing", "CityId": "101010100", "Temp": "3", "WD": "Northwest Wind", "WS": "Level 3 ","SD ":"23%","wse ":"3 ","Time ":"21:20 ","Isradar ":"1 ","레이더 ":"JC_Radar_az9010_JB ","NJD ":"No Live ","Qy ":"1019 "}}
*/
var data = json.parse (stdout);
Console.log (데이터);
}
});
컬의 결과를 직접 경험하고 실행되는 스크립트는 동일합니다.
3. 매개 변수를 전달하는 쉘 스크립트를 호출하십시오 (child_process.execfile ()).
이를 위해서는 먼저 쉘 스크립트를 준비해야합니다. 예를 들어, 서버에 연결하여 비밀번호를 수정하려면 IP, 사용자, 새 PWD, Old PWD를 제공하고 새 쉘 스크립트 파일 Change_Password.sh를 작성해야합니다.
코드 사본은 다음과 같습니다.
#!/bin/sh
IP = ""
이름 = ""
password = ""
newPassword = ""
getOpts "h : u : p : n :"arg #콜론 옵션 옵션 옵션에 옵션에 매개 변수가 필요하다는 것을 나타냅니다.
하다
CASE $ arg in
시간)
ip = $ optarg
;;
유)
이름 = $ optarg
;;
피)
비밀번호 = $ optarg
;;
N)
NewPassword = $ optarg
;;
?) #당신이 알지 못하는 옵션이 언제라도 Arg는?
echo "알 수없는 매개 변수가 포함"
출구 1
;;
ESAC
완료
#userID를 먼저 얻습니다
userId =`/usr/bin/ipmitool -i lanplus -h $ ip -u $ name -p $ password 사용자 목록 | grep 루트 | awk '{print $ 1}'`
# echo $ userId
userID에 따라 #비밀번호를 모색합니다
/usr/bin/ipmitool -i lanplus -h $ ip -u $ name -p $ password 사용자 세트 비밀번호 $ userId $ newPassword
그런 다음 Nodejs 파일을 준비 하여이 쉘 스크립트 (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', nulecpassword], null, function (err, stdout, stderr) {
콜백 (err, stdout, stderr);
});
실행 결과를 여기에 게시하는 것이 편리하지는 않지만 성격을 사용하여 테스트를 거쳤습니다.
위의 내용을 읽은 후에는 실제로 Python Scripts를 호출 할 수있는 긴장이 없습니다. 이는 본질적으로 명령을 실행하는 것입니다.
4. Python 스크립트 호출 (Python 스크립트 자체가 매개 변수를 전달합니다)
방해가 있습니다. 다음 단락은 Python에 전달 된 매개 변수에 대한 간단한 설명입니다.
코드 사본은 다음과 같습니다.
#-*-코딩 : UTF-8-*-
'' ''
필요한 모듈 : SYS
매개 변수 수 : len (sys.argv)
스크립트 이름 : sys.argv [0]
매개 변수 1 : sys.argv [1]
매개 변수 2 : sys.argv [2]
'' ''
SYS 가져 오기
인쇄 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+'', 함수 (오류, stdout, stderr) {
if (stdout.length> 1) {
console.log ( '당신은 args :', stdout);
} 또 다른 {
console.log ( '당신은 아르를 제안하지 않습니다');
}
if (오류) {
console.info ( 'stderr :'+stderr);
}
});
py_test.py의 내용은 다음과 같습니다.
#-*-코딩 : UTF-8-*-
SYS 가져 오기
sys.argv 인쇄
작업 결과는 다음과 같습니다.
아주 좋고 2014 년 절묘한 블로그를 완성했습니다. 하하 ~~