我正在尝试使用NodeJS执行多个python脚本并将这些脚本的内容发送到本地主机。我不想特定于确切的python脚本,而要使用类似于执行使用“ .py”的python脚本的方法。
我尝试运行多个进程,但是最后一个覆盖了本地主机上的前一个进程。
Python脚本:
hellothere.py
print("hello there")
helloworld.py
print("Hello World!")
Goodbye.py
print("Goodbye!")
Pythonspawn.js
var express = require('express');
var app = express();
app.get('/name', function callName(req, res) {
var spawn = require("child_process").spawn;
var PythonProcess1 = spawn('python',["./hellothere.py"] );
var PythonProcess2 = spawn('python', ['./helloworld.py']);
var PythonProcess3 = spawn('python', ['./Goodbye.py']);
PythonProcess1.stdout.on('data', function(data) {
res.send(data.toString());
})
PythonProcess2.stdout.on('data', function(data) {
res.send(data.toString());
})
PythonProcess3.stdout.on('data', function(data) {
res.send(data.toString());
})
}
})
app.listen(1820, function() {
console.log('Server is running on port %d.', this.address().port);
})
我想执行任何使用“ .py”的python脚本,而不是指定要执行的确切脚本。如果可能的话,如果它们具有不同数量的参数,我还要执行脚本。 (即,如果helloworld.py有两个sys.arg [i],而Goodbye.py有一个sys.arg [i]。)
答案 0 :(得分:0)
您可以在这里使用exec(),在这里,我正在检查当前工作目录中的所有.js文件,将其全部执行,并将结果添加到数组中,最后返回它。
const { exec } = require('child_process');
var result = [];
exec('ls | grep .js', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
var s = stdout.split('\n');
s.pop();
console.log(s);
executeFiles(s);
});
function executeFiles(filenames) {
filenames.forEach((element, index) => {
exec(`node ${element}`, (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(stdout);
result.push(stdout.toString());
if (index === filenames.length - 1) {
console.log(result);
return result;
}
});
});
}