Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

364
Views
Cómo implementar la comunicación bidireccional entre nodejs y un subproceso de python

Tengo una aplicación node.js que necesita pasar la entrada a un programa de python y recuperar la entrada. Este proceso debe ocurrir con frecuencia y con la menor latencia posible. Por lo tanto, he elegido usar el paquete child_process. El código javascript está debajo

 child_process = require('child_process'); class RFModel { constructor () { this.answer = null; this.python = child_process.spawn('python3', ['random_forest_model.py']); this.python.stdout.on('data', (data)=>{ this.receive(data); }); } send (data) { this.answer = null; this.python.stdin.write(data); } receive (data) { data = data.toString('utf8') console.log(data) this.answer = data; } } const model = new RFModel() function timeout(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } (async ()=>{ await timeout(7000) model.send('asdf') })();

Y este es el código de Python:

 import sys sys.stdout.write('test') sys.stdout.flush() for line in sys.stdin: open("test.txt", "a") #janky test if input recieved sys.stdout.write(line) sys.stdout.flush()

El proceso de nodejs recibe la primera salida de "prueba" del proceso de python, pero no parece que python reciba ninguna entrada de nodejs, ya que no se está creando ningún archivo de texto o eco. ¿Qué estoy haciendo mal?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

No soy un experto en python, pero presumiblemente, for line in sys.stdin: está esperando una línea real (una serie de caracteres seguidos de un carácter de salto de línea). Pero, desde su programa nodejs no está enviando un carácter de salto de línea. Solo estás enviando una serie de caracteres. Entonces, su programa Python todavía está esperando que el carácter de salto de línea signifique el final de la línea.

Intenta cambiar esto:

 model.send('asdf')

a esto:

 model.send('asdf\n')

Cuando lo ejecuto ahora con este cambio, obtengo este resultado:

 test asdf

Donde hay un retraso antes de que aparezca el asdf .

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!