node.js에서 python 사용하기(feat. python-shell)
Written on September 16, 2019
현재 진행중인 프로젝트에서 통계를 구현할 일이 있어 python을 사용해 보았다. 복잡한 수식은 아니지만, 경험해보는 취지로! 🤩
구글링을 해보니 python-shell이라는 모듈을 사용하면 nodejs 코드 내에서 python 파일을 실행하고, data를 주고받을 수 있었다.
기본적으로. PythonShell.run()
이라는 함수를 사용해 파이썬 코드를 실행할 수 있는데, options 인자로 파이썬 파일 경로와 args
를 전달한다. 파이썬 코드 쪽에서 print()
하는 값이 콜백함수의 data로 전달된다.
const { PythonShell } = require("python-shell");
let options = {
scriptPath: "path/to/my/scripts",
args: ["value1", "value2", "value3"]
};
PythonShell.run("my_script.py", options, function(err, data) {
if (err) throw err;
console.log(data);
});
다음은 json 형태의 data를 주고 받는 코드이다.
// .js
var options = {
scriptPath: path.join(__dirname, "../python/"),
args: [JSON.stringify({ result }), JSON.stringify({ inputData })]
};
PythonShell.run("get_avg.py", options, function(err, data) {
res.status(200).json({ data: JSON.parse(data), success: true });
});
전달된 args
는 sys.argv[1]
형태로 읽을 수 있으며, json 형태의 data는 json.loads()
로 파싱한다.
연산이 끝난 json data는 json.dumps(result)
형태로 json화 하여 프린트 하면 node.js 쪽에 data로 전달된다.
# .py
import json
import sys
result = json.loads(sys.argv[1])['result']
inputData = json.loads(sys.argv[2])['inputData']
...
print(json.dumps(result))
👩🏻💻 배우는 것을 즐기는 프론트엔드 개발자 입니다
부족한 블로그에 방문해 주셔서 감사합니다 🙇🏻♀️
in the process of becoming the best version of myself