Estaba tratando de llamar a un código de Python desde mi archivo de nodo.

Aquí está mi código node.js:

var util = require("util");

var spawn = require("child_process").spawn;
var process = spawn('python',["workpad.py"]);

util.log('readingin')

process.stdout.on('data',function(data){
    util.log(data);
});

Y mi parte de python:

import sys

data = "test"
print(data)
sys.stdout.flush()

En la ventana cmd, solo se muestra util.log('readingin'). ¿Cuál es el problema de mi código?

2
Bing Gan 11 dic. 2015 a las 02:46

4 respuestas

La mejor respuesta

No hay ningún problema ...

Aquí hay una pequeña modificación de su código de trabajo (convierto el búfer en una cadena para que sea legible por humanos)

// spawn_python.js
var util = require("util");

var spawn = require("child_process").spawn;
var process = spawn('python',["python_launched_from_nodejs.py"]);

util.log('readingin')

process.stdout.on('data',function(chunk){

    var textChunk = chunk.toString('utf8');// buffer to string

    util.log(textChunk);
});

Y aquí está tu pitón

# python_launched_from_nodejs.py
import sys

data = "this began life in python"
print(data)
sys.stdout.flush()

Finalmente aquí está la salida de una carrera

node spawn_python.js 
11 Dec 00:06:17 - readingin
11 Dec 00:06:17 - this began life in python

Nodo --version

V5.2.0

6
Scott Stensland 11 dic. 2015 a las 06:58

También estaba enfrentando el mismo problema, encontré esto:

var myPythonScript = "script.py";
// Provide the path of the python executable, if python is available as 
// environment variable then you can use only "python"
var pythonExecutable = "python.exe";

// Function to convert an Uint8Array to a string
var uint8arrayToString = function(data){
    return String.fromCharCode.apply(null, data);
};

const spawn = require('child_process').spawn;
const scriptExecution = spawn(pythonExecutable, [myPythonScript]);

// Handle normal output
scriptExecution.stdout.on('data', (data) => {
   console.log(uint8arrayToString(data));
});

// Handle error output
scriptExecution.stderr.on('data', (data) => {
    // As said before, convert the Uint8Array to a readable string.
    console.log(uint8arrayToString(data));
});

scriptExecution.on('exit', (code) => {
    console.log("Process quit with code : " + code);
});
1
tripleee 16 nov. 2017 a las 08:05

Siempre puedes intentar algo como esto:

var child_process = require('child_process');

  child_process.exec('python myPythonScript.py', function (err){
    if (err) {
    console.log("child processes failed with error code: " + err.code);
  }
});
0
user2263572 11 dic. 2015 a las 03:53

Su código de Python no es correcto:

import sys

data = "test"
print(data)   ###not test
sys.stdout.flush()
1
MikeZhang 11 dic. 2015 a las 00:56
34213845