반응형

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

 

Run Python script from Node.js.

In this article i will go through a sample app that can run a python script from Node.js , get data from the script and send it to the…

medium.com


https://nodejs.org/api/child_process.html

 

Child process | Node.js v18.9.1 Documentation

Child process# Source Code: lib/child_process.js The node:child_process module provides the ability to spawn subprocesses in a manner that is similar, but not identical, to popen(3). This capability is primarily provided by the child_process.spawn() functi

nodejs.org

 

반응형

+ Recent posts