Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Python加载数据并保存到JavaScript中的变量_Javascript_Python_Node.js - Fatal编程技术网

如何从Python加载数据并保存到JavaScript中的变量

如何从Python加载数据并保存到JavaScript中的变量,javascript,python,node.js,Javascript,Python,Node.js,我正在从事一个项目,在这个项目中,我需要使用Python中的一些库,但是,该项目的大部分将用Javascript(React Native)编码 我目前正在从JavaScript调用Python,我想将从Python调用的数据保存到JavaScript文件中的变量中 以下是我目前正在使用的代码: index.js const spawn = require("child_process").spawn; const process = spawn("python&

我正在从事一个项目,在这个项目中,我需要使用Python中的一些库,但是,该项目的大部分将用Javascript(React Native)编码

我目前正在从JavaScript调用Python,我想将从Python调用的数据保存到JavaScript文件中的变量中

以下是我目前正在使用的代码:

index.js

const spawn = require("child_process").spawn;

const process = spawn("python", ["./hello.py", 4]);

var result;

process.stdout.on("data", (data) => {
  result = parseInt(data.toString());
});

var newNum = result * 10;
console.log(newNum);
你好,派伊

import sys

sum = 0
sum = int(sys.argv[1])
sum = sum*3

print(sum)
但是,控制台输出只是“未定义”,我该怎么做才能解决这个问题


谢谢

因为Node.js是异步的,所以您需要等待子进程退出,然后才能尝试操作
结果
。让我举例说明:

const spawn = require("child_process").spawn;
const process = spawn("python", ["./hello.py", 4]);
// A process was started in the background, and your code continues...
// You declare a `result` variable, whose value is `undefined`...
var result;
// Python might still be starting up at this point...
// You register a handler for output from the process, but it might not get called
// yet since your computer is from 1996 and it takes a while to start Python...
process.stdout.on("data", (data) => {
  result = parseInt(data.toString());
});
// You operate on the `result`, which still is undefined...
var newNum = result * 10;
// Oh! Hey! Python started in the background! It printed out some data, and now the data handler from before got called! Yay! `result` is indeed 12 right now!
// but... you know... let's print `undefined * 10`.
console.log(newNum);
您可以等待标准输出流结束:

const spawn = require("child_process").spawn;

const process = spawn("python", ["./hello.py", 4]);

var result;

process.stdout.on("data", (data) => {
  result = parseInt(data.toString());
});

process.stdout.on("end", () => {
  var newNum = result * 10;
  console.log(newNum);
});
或退出的过程:

const spawn = require("child_process").spawn;

const process = spawn("python", ["./hello.py", 4]);

var result;

process.stdout.on("data", (data) => {
  result = parseInt(data.toString());
});

process.on("exit", () => {
  var newNum = result * 10;
  console.log(newNum);
});
您可以将其封装为一个整洁的助手函数,该函数返回一个承诺(未测试,抱歉):


由于Node.js是异步的,您需要等待子进程退出,然后才能尝试对
结果进行操作。
。我该怎么做?好的,这在获取新编号方面是有效的,但假设我想在该JavaScript文件中的程序的其他部分中使用该数据?promise函数应该在这方面有所帮助,因为你的输出是一个字符串。我真的不明白你的意思,我不确定你是否知道我的意思。假设我正在处理JS文件中的一些数据,我需要Python对这些数据进行一些修改,我希望能够调用一个函数,然后返回一个值,我可以分配给JS文件中使用的变量。例如,我希望从Python检索到的值存储在我的JS文件中的全局变量中。好的,我想我可能有一个解决方法,在我尝试并完全实现我打算用JS和Python方法做的事情之前,我不会知道。但是,我认为在
process.stdout.on(“end”…
方法中,我可以调用另一个函数并将该值传递给它,我遇到的问题是将Python返回的值赋给一个新变量。感谢您的帮助。
const spawn = require("child_process").spawn;

function spawnAndCaptureOutput(command, args) {
  return new Promise((resolve) => {
    const process = spawn(command, args);
    let stdout = "";
    let stderr = "";
    process.stdout.on("data", (data) => {
      stdout += data.toString();
    });
    process.stderr.on("data", (data) => {
      stderr += data.toString();
    });
    process.on("close", (code) => {
      resolve({ stdout, stderr, code });
    });
    // TODO: error handling?
  });
}

spawnAndCaptureOutput("python", ["./hello.py", 4]).then(
  ({ stdout }) => {
    const number = parseInt(stdout);
    console.log(number * 8);
  },
);