Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

308
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda