Node.js에서 Python 함수를 호출하는 방법
Express Node.js 응용 프로그램이 있지만 Python에서 사용할 기계 학습 알고리즘도 있습니다. 기계 학습 라이브러리의 강력한 기능을 활용하기 위해 Node.js 애플리케이션에서 Python 함수를 호출 할 수있는 방법이 있습니까?
내가 아는 가장 쉬운 방법은 노드와 함께 제공되는 "child_process"패키지를 사용하는 것입니다.
그런 다음 다음과 같은 작업을 수행 할 수 있습니다.
const spawn = require("child_process").spawn;
const pythonProcess = spawn('python',["path/to/script.py", arg1, arg2, ...]);
그런 다음 import sys
파이썬 스크립트를 arg1
사용하고 sys.argv[1]
,, 등을 arg2
사용하여 액세스 할 수 있습니다 sys.argv[2]
.
노드로 데이터를 다시 보내려면 파이썬 스크립트에서 다음을 수행하십시오.
print(dataToSendBack)
sys.stdout.flush()
그런 다음 노드는 다음을 사용하여 데이터를 청취 할 수 있습니다.
pythonProcess.stdout.on('data', (data) => {
// Do something with the data returned from python script
});
이렇게하면 스폰을 사용하여 여러 인수를 스크립트에 전달할 수 있으므로 인수 중 하나가 호출 할 함수를 결정하고 다른 인수는 해당 함수 등에 전달되도록 Python 스크립트를 재구성 할 수 있습니다.
이것이 분명하기를 바랍니다. 설명이 필요한지 알려주세요.
Python을 사용하고 Node.js 애플리케이션에 머신 러닝 모델을 통합하려는 사람들을위한 예 :
child_process
핵심 모듈을 사용합니다 .
const express = require('express')
const app = express()
app.get('/', (req, res) => {
const { spawn } = require('child_process');
const pyProg = spawn('python', ['./../pypy.py']);
pyProg.stdout.on('data', function(data) {
console.log(data.toString());
res.write(data);
res.end('end');
});
})
app.listen(4000, () => console.log('Application listening on port 4000!'))
sys
파이썬 스크립트 에는 모듈이 필요하지 않습니다 .
다음은 다음을 사용하여 작업을 수행하는 모듈 방식입니다 Promise
.
const express = require('express')
const app = express()
let runPy = new Promise(function(success, nosuccess) {
const { spawn } = require('child_process');
const pyprog = spawn('python', ['./../pypy.py']);
pyprog.stdout.on('data', function(data) {
success(data);
});
pyprog.stderr.on('data', (data) => {
nosuccess(data);
});
});
app.get('/', (req, res) => {
res.write('welcome\n');
runPy.then(function(fromRunpy) {
console.log(fromRunpy.toString());
res.end(fromRunpy);
});
})
app.listen(4000, () => console.log('Application listening on port 4000!'))
이 python-shell
모듈 extrabacon
은 Node.js에서 기본이지만 효율적인 프로세스 간 통신과 더 나은 오류 처리를 통해 Python 스크립트를 실행하는 간단한 방법입니다.
Installation: npm install python-shell
.
Running a simple Python script:
var PythonShell = require('python-shell');
PythonShell.run('my_script.py', function (err) {
if (err) throw err;
console.log('finished');
});
Running a Python script with arguments and options:
var PythonShell = require('python-shell');
var options = {
mode: 'text',
pythonPath: 'path/to/python',
pythonOptions: ['-u'],
scriptPath: 'path/to/my/scripts',
args: ['value1', 'value2', 'value3']
};
PythonShell.run('my_script.py', options, function (err, results) {
if (err)
throw err;
// Results is an array consisting of messages collected during execution
console.log('results: %j', results);
});
For the full documentation and source code, check out https://github.com/extrabacon/python-shell
I'm on node 10 and child process 1.0.2
. The data from python is a byte array and has to be converted. Just another quick example of making a http request in python.
node
const process = spawn("python", ["services/request.py", "https://www.google.com"])
return new Promise((resolve, reject) =>{
process.stdout.on("data", data =>{
resolve(data.toString()); // <------------ by default converts to utf-8
})
process.stderr.on("data", reject)
})
request.py
import urllib.request
import sys
def karl_morrison_is_a_pedant():
response = urllib.request.urlopen(sys.argv[1])
html = response.read()
print(html)
sys.stdout.flush()
karl_morrison_is_a_pedant()
p.s. not a contrived example since node's http module doesn't load a few requests I need to make
You could take your python, transpile it, and then call it as if it were javascript. I have done this succesfully for screeps and even got it to run in the browser a la brython.
참고URL : https://stackoverflow.com/questions/23450534/how-to-call-a-python-function-from-node-js
'IT박스' 카테고리의 다른 글
Ruby의 base64 인코딩 문자열에서 이상한 \ n (0) | 2020.06.15 |
---|---|
.NET에서 SmtpClient 객체의 사용자 이름과 비밀번호를 설정하는 방법은 무엇입니까? (0) | 2020.06.14 |
XML보다 JSON을 선호하는시기 (0) | 2020.06.14 |
폴더 대 폴더 (또는 폴더 ')의 의미 (0) | 2020.06.14 |
테이블을 데이터 프레임으로 변환하는 방법 (0) | 2020.06.14 |