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

309
Views
¿Por qué se omitió el proceso secundario para ejecutar mi secuencia de comandos de Python?

Tengo este código js:

 const python = spawn('python', [path.join(settings.PROJECT_DIR, '/tests_explorer/scripts/product/product.py').replace(/\\/g, "/"), 'node.js', 'python']); python.stdout.on('data', function (data) { console.log('Pipe data from python script ...'); dataToSend = data.toString(); console.log(dataToSend) });

Debería ejecutar mi python Script product.py:

 import sys import general.general //my own utils print('#Hello from python#') print('First param:'+sys.argv[1]+'#') print('Second param:'+sys.argv[2]+'#') name = general.id_generator(9) print(name)

Pero el nodo js parece omitido para ejecutar mi python, si no importo general.general, que es mi propia utilidad para generar un nombre aleatorio, el python se ejecuta bien y puedo ver los datos de impresión. ¿Alguien sabe cómo resolver esto? Gracias

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

0

Compruebe si está presente en la ruta ( process.env.PATH ), si python existe en su sistema (puede ser python3 o python2 ) y si la ruta al archivo es correcta y quizás no dependa del sistema operativo:

 const { spawn } = require('child_process'); const py = spawn('python3', ['-c', 'print("hello")']); py.stdout.on('data', (data) => {console.log(`stdout: ${data}`);});

Funciona en CLI/REPL porque mantiene el proceso abierto. Sin embargo, en un archivo, no lo hace, por lo tanto, la programación basada en eventos no recibe el evento antes de que el bucle de eventos logre cerrarse (algo así como while (true) {} en segundo plano con interrupciones consistentes para que su código pueda ejecutar en el medio ).

Para eso, puede utilizar spawnSync() que bloqueará el programa hasta que se genere el proceso, se intercambien los datos y se cierre el proceso.

 const { spawnSync } = require('child_process'); const py = spawnSync('python3', ['main.py']); console.log(py.output.toString());

O como en la pregunta vinculada, setTimeout() u otros trucos del sistema para esperar básicamente a que el bucle de eventos procese su evento (en este caso on("data", ...) debido a la naturaleza asíncrona del módulo child_process .

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!