ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Node.js에서 python 실행하기
    코딩/PYTHON 2020. 11. 27. 15:56

    window 환경에서 python shell을 꾸준히 사용했으나,

    해당 부분이 원인 모를 오류가 나서 다른 방법을 찾게 되었습니다

    node.js에서 child.process로 다른 프로세스를 실행할수 있습니다.

    child_process.spawn(command[, args][, options])

    ps. python3라고 적어논 이유는

    내 mac 환경에서는 python 버전 3 버전을 실행 시키려면 python3라는 명령어를 터미널에서

    입력해서 사용하기 때문.

    String.prototype.replaceAll = function (org, dest) {
      return this.split(org).join(dest);
    };
    const FILE_ROOT_DIR = process.cwd();
    router.post('/getRealtimeTerms', async (req, res) => {
      try {
        var util = require('util');
        var spawn = require('child_process').spawn;
        var process = spawn('python3', [
          FILE_ROOT_DIR + '/src/lib/python/naverRealtime.py',
        ]);
        util.log('readingin');
        process.stdout.on('data', function (chunk) {
          let textChunk = chunk.toString('utf-8'); // buffer to string
          //textChunk = a(textChunk);
          util.log(textChunk);
          textChunk = textChunk.replaceAll("'", '"');
          textChunk = textChunk.replaceAll('None', '"None"');
          const obj = JSON.parse(textChunk);
          res.json(obj);
        });
        //replaceAll prototype 선언
      } catch (e) {
        console.error(e);
      }
    });

    여기서 보실 건

        var process = spawn('python3', [
          FILE_ROOT_DIR + '/src/lib/python/naverRealtime.py',
        ]);

    python3라는 명령어로 두번째 인자값에 있는 파일을 실행하겠다는 겁니다.

    python 파일에서 print를 하면 그 print된 text가

    chunk에 담겨져 나오게 됩니다.

    이걸 이용, 가공해서 쓰시면 되겠습니다.

    저는 이런식으로 사용했습니다.

    node.js에서 프로세스로 실행시킨

    이 파이썬 파일은 네이버 실시간 검색어를 크롤링하는 파이썬 파일입니다.

    해당 크롤링 데이터 JSON형태로 출력시키게 해놓았습니다.

    만약 해당 routing 경로로 호출하게 된다면

    요런 데이터를 받을 수 있습니다.

    댓글

Designed by Tistory.