Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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
在Node.js中作为子进程运行时,Python版本错误?_Python_Node.js_Python 3.x_Child Process - Fatal编程技术网

在Node.js中作为子进程运行时,Python版本错误?

在Node.js中作为子进程运行时,Python版本错误?,python,node.js,python-3.x,child-process,Python,Node.js,Python 3.x,Child Process,目前,我正在尝试运行一个Python脚本,该脚本用一个HTML代码字符串进行响应,并通过Node.js子进程运行该脚本。以下是我为服务器编写的代码: const express = require('express'); const app = express(); const PORT = process.env.PORT || 5000; app.listen(PORT, () => console.log(`Server started on port ${PORT}`)); a

目前,我正在尝试运行一个Python脚本,该脚本用一个HTML代码字符串进行响应,并通过Node.js子进程运行该脚本。以下是我为服务器编写的代码:

const express = require('express');
const app = express();
const PORT = process.env.PORT || 5000;

app.listen(PORT, () => console.log(`Server started on port ${PORT}`));

app.get('/', (req,res) => {
    const spawn = require("child_process").spawn;
    const pythonProcess = spawn('python',["graphing.py"]);
    pythonProcess.stdout.on('data', (data) => {
        console.log("It worked!")
        res.write(data.toString());
        res.end();
    });
    pythonProcess.stderr.on('data', (data) => {
        console.log("ERROR!")
        console.log(data.toString());
        res.write("Error. Check console.");
        res.end();
    });
});
我曾尝试用Python中的简单print语句运行这段代码,效果非常好。但是,当我使用正确的脚本进行尝试时,会出现以下错误:

Traceback (most recent call last):
  File "graphing.py", line 34, in <module>
    print(mpld3Plot("./data/weather/daily/Baka_ThruApr-2019.csv", ('maxTemp','minTemp')))  
  File "graphing.py", line 18, in mpld3Plot
    with open(abs_path, newline='') as csvfile:
TypeError: 'newline' is an invalid keyword argument for this function
events.js:200
      throw er; // Unhandled 'error' event
      ^

Error: spawn C:UsersNAMEAppDataLocalProgramsPythonPython38python.exe ENOENT     
    at Process.ChildProcess._handle.onexit (internal/child_process.js:264:19)
    at onErrorNT (internal/child_process.js:456:16)
    at processTicksAndRejections (internal/process/task_queues.js:81:21)
Emitted 'error' event on ChildProcess instance at:
    at Process.ChildProcess._handle.onexit (internal/child_process.js:270:12)
    at onErrorNT (internal/child_process.js:456:16)
    at processTicksAndRejections (internal/process/task_queues.js:81:21) {
  errno: 'ENOENT',
  code: 'ENOENT',
  syscall: 'spawn C:UsersNAMEAppDataLocalProgramsPythonPython38python.exe',     
  path: 'C:UsersNAMEAppDataLocalProgramsPythonPython38python.exe',
  spawnargs: [ 'graphing.py' ]
}

关于我现在应该做什么有什么想法吗?

从其他脚本调用Python时,这是一个典型的问题,通常是因为从终端运行时出现的默认环境与从程序或脚本中调用可执行文件时出现的默认环境不同。因此,替换:

const pythonProcess = spawn('python',["graphing.py"]);
与:


(换句话说,指定所需的Python3可执行文件的完整路径,而不是在运行时依赖本机环境)。

成功执行代码时,如何设置Python环境?除非您设置Python环境,否则它将采用默认值。如果在终端中执行
python--version
,会得到什么?当你单独执行你的代码时,你会得到什么?我编辑了这篇文章来展示当我这样做时会发生什么。过去有什么想法吗?谢谢。请显示您实际使用的完整路径-错误中的路径表明它是“C:UsersNAMEAppDataLocalProgramsPythonPython38python.exe”,听起来好像输入不正确。非常感谢。当我复制路径时,它的形式是“path1\path2\path3”,所以它读作“path1path2path3”。我只是用/,所以它工作得很好。非常感谢。超级!如果它有帮助,您介意将它标记为正确答案并对其进行表决吗?
const pythonProcess = spawn('/complete/path/to/python3',["graphing.py"]);