반응형
Node.js에서 python 스크립트를 실행하는 방법은 내장 모듈인 'child_process'의 spawn을 사용하면 된다.
먼저 실행할 python 코드를 작성하자.
1. python 스크립트 실행
"Hello World!"를 출력하는 python 스크립트
<hello.py>
1
|
print('Hello World!')
|
cs |
2. 매개변수가 있는 python 함수 호출하기
func함수에 전달된 인자를 하나씩 출력한다.
<function.py>
1
2
3
4
5
6
7
8
9
|
import sys
def func(*args):
for arg in args:
print(arg)
if __name__=='__main__':
func(*sys.argv[1:])
|
cs |
node.js에서 전달한 인자는 sys.argv[1]부터 sys.argv[전달한 인자의 개수]에 저장된다.
python 스크립트가 인터프리터로 직접 실행되면 __name__이라는 글로벌 변수에 '__main__'이 할당된다.
그래서 python 스크립트 코드를 node.js에서 실행하게 되면 if문이 True 되어 func 함수가 호출된다.
.
이제 Node.js에서 python 코드를 실행해보자
<pythonCall.js>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
const {spawn} = require('child_process');
let dataFromPyton;
/*python 코드 실행*/
const pythonProc1 = spawn('python', ['hello.py']);
pythonProc1.stdout.on('data', (data)=>{
dataFromPyton = data.toString();
})
pythonProc1.on('close', (code)=>{
console.log(dataFromPyton);
})
/*python 함수 인자 전달 실행*/
const pythonProc2 = spawn('python', ['function.py', 'arg1', 'arg2', 'arg3']);
pythonProc2.stdout.on('data', (data)=>{
dataFromPyton = data.toString();
})
pythonProc2.on('close', (code)=>{
console.log(dataFromPyton);
})
|
cs |
spawn으로 python을 위한 자식 프로세스를 생성하고 이벤트 리스너를 등록한다.
python 스크립트가 호출되어 stdout에 print 한 결과가 전달되면 Node.js에서 그 결과를 콜백 함수로 전달한다.
[reference]
https://medium.com/swlh/run-python-script-from-node-js-and-send-data-to-browser-15677fcf199f
https://nodejs.org/api/child_process.html
반응형