将多个参数传递给从 node.js 生成的 python 脚本

Tre*_*est 1 spawn node.js

我正在尝试在 Node.JS 中“生成”一个 python 脚本。python 脚本接受多个文件路径作为参数。此命令有效:

python3 script.py 'path1' 'path2' 'path3'
Run Code Online (Sandbox Code Playgroud)

在节点中,我得到了一个带有路径的 var:

args = ["path1", "path2", "path3"]
Run Code Online (Sandbox Code Playgroud)

但是当我尝试生成脚本时:

var spawn = require("child_process").spawn;
var pyspawn = spawn(
  'python3', [pyscript.py, args]
);
Run Code Online (Sandbox Code Playgroud)

但这似乎发出命令:

python3 script.py [path1,path2,path3]
Run Code Online (Sandbox Code Playgroud)

修改各种 concat()s、join()s 和 toString()s,我可以得到如下内容:

python3 script.py "'path1' 'path2' 'path3'"
Run Code Online (Sandbox Code Playgroud)

......但不能为我的生活想出如何简单地做到这一点

小智 5

我认为unshift可能是你正在寻找的。

unshift() 方法将一个或多个元素添加到数组的开头,并返回新数组的新长度。

请尝试以下操作:

const spawn = require("child_process").spawn;
const pyFile = 'script.py';
const args = ['path1', 'path2', 'path3'];
args.unshift(pyFile);
const pyspawn = spawn('python3', args);

pyspawn.stdout.on('data', (data) => {
    console.log(`stdout: ${data}`);
});

pyspawn.stderr.on('data', (data) => {
    console.log(`stderr: ${data}`);
});

pyspawn.on('close', (code) => {
    console.log(`child process exited with code ${code}`);
});
Run Code Online (Sandbox Code Playgroud)