所以假设我有2个文件,a.js和b.js,其中a.js是一个简单的node.js脚本,它调用b.js这是一个Discord.js bot。
a.js
const { exec } = require(‘child_process’);
exec(‘node b.js’, (err,stdout,stderr) => {
console.log(‘err: ‘ + err + ‘\n stdout: ‘ + stdout + ‘\n stderr:‘ + stderr);
});
b.js
const Discord = require(‘discord.js’);
const fs = require(‘fs’);
var bot = new Discord.Client();
var token;
fs.readFile(‘token.txt’,(err,data) => {
if(err){console.log(err); process.exit(0);}
token = data;
});
bot.on(‘ready’,()=>{console.log(‘ready’);});
bot.on(‘message’, message => {
if(message.content == ‘ping’){
message.channel.send(‘pong’);
}
});
bot.login(token);
当我运行a.js时,唯一的输出是
err:
stdout:
stderr:
a.js然后终止,看起来好像b.js从未运行过。 我想知道为什么会这样,为什么。 另外,如果有人想知道为什么我这样做,我把它作为一个更大的脚本的一部分,我把问题归结为此。主要部分是b.js必须从exec运行。我使用最新版本的节点和Discord.js在Windows 10中运行它。谢谢
答案 0 :(得分:0)
我开始使用b.js运行a.js,除了我将b.js更改为console.log
a.js
!!x
b.js
const { exec } = require('child_process');
exec('node b.js', (err,stdout,stderr) => {
console.log('err: ' + err + '\n stdout: ' + stdout + '\n stderr:' + stderr);
});
然后,当我运行节点a.js时,我得到;
console.log("B was called");
我猜这是一个路径问题,A找不到B相对于它的调用位置?
答案 1 :(得分:0)
我还有另外一次,但通过完整的不和谐机器人设置...
我的a.js
看起来像这样......
const { spawn } = require('child_process');
const child = spawn('node',['b.js']);
process.stdin.pipe(child.stdin);
child.stdout.on('data', (data) => {
console.log(`child stdout:\n${data}`);
});
child.stderr.on('data', (data) => {
console.log(`child stderr:\n${data}`);
});
我的b.js
看起来像这样......
const Discord = require('discord.js');
const fs = require('fs');
var bot = new Discord.Client();
var token;
fs.readFile('token.txt', {encoding: 'utf8'}, (err,token) => {
if(err){console.log(err); process.exit(0);}
bot.on('ready',()=>{
console.log('ready');
});
bot.on('message', message => {
if(message.content == 'ping'){
message.channel.send('pong');
}
});
bot.login(token);
});
在b.js
上,我必须utf8
读取该文件,并确保我的token.txt
文件没有尾随的前导空格。此外,我将机器人登录代码移动到读取的令牌文件的回调中。
下面的输出示例......
我通过不和谐发送ping,看它是否有效,机器人用pong回复。
我希望这段代码适合你,让我知道......