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 });
});

전달된 argssys.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