我试图通过nodejs启动Windows程序,并使其输出在nodejs中使用。
它似乎与Node.js Child process can not catch windows exe file's output类似,但是没有解决此问题的方法,因此我尝试在这里再次提出问题。
对于我来说,我尝试启动数据库并等待其输出完成初始化(需要一些时间)。
当我尝试直接执行exe时,我在输出流上什么都没有收到(请参见下面的代码)。即使我分离它并通过任务管理器杀死程序,也可能是因为缓冲了输出。
const arangoDb = spawn("arangod.exe", {
cwd: paths.arangodb + "/usr/bin/",
detached: false,
shell: true,
windowsHide: false,
}, (error, stdout, stderr) => {
console.log('spawn callback', error, stdout, stderr)
}
);
arangoDb.stdout.on("data", function (data) {
console.log('out data', data.toString())
});
arangoDb.stdout.on("end", function (data) {
console.log('out end', data.toString())
});
我实际上在听任何stdout | in | err事件,但是出于可读性考虑,我缩短了代码。
正如在上述问题的答案中提到的那样,我还尝试启动cmd.exe并发送命令以启动“ arangod.exe”:
const arangoDb = spawn("cmd.exe", {
cwd: paths.arangodb + "/usr/bin/",
detached: false,
shell: true,
windowsHide: false,
}, (error, stdout, stderr) => {
console.log('spawn callback', error, stdout, stderr)
}
);
arangoDb.stdout.on("data", function (data) {
console.log('out data', data.toString())
});
arangoDb.stdout.on("end", function (data) {
console.log('out end', data.toString())
});
if(arangoDb.stdin.writable) {
arangoDb.stdin.write('arangod.exe\n', 'UTF8', function() {
console.log('write arangod.exe');
});
}
但是在这里,程序再次成功启动,但是在stdout上我只收到cmd.exe输出,而从'arangod.exe'中什么也没收到(记住stdout.onData我先注销'out data'):
out data Microsoft Windows [Version 10.0.17134.165]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\arangodb\usr\bin>arangod.exe
我还尝试使用exec
,execFile
及其...Sync
-variant,带有分离的子进程windowsHide true|false
来执行程序,但不幸的是,我也一无所获程序中的任何流(输入,输出,错误)。
您知道该问题的解决方案吗?
PS: 当前,我非常不好地检查数据库是否正确启动:在尝试连接数据库的地方使用自调用超时。但是我认为这与最佳做法相差甚远,而且我无法真正处理错误。
PPS: 通常'arangod.exe'输出如下内容,并且不会打开其他窗口:
2018-07-21T18:49:29Z [8352] INFO {authentication} Jwt secret not specified, generating...
2018-07-21T18:49:29Z [8352] INFO ArangoDB 3.3.12 [win64] 64bit, using build tags/v3.3.12-0-g225095d762, VPack 0.1.30, RocksDB 5.6.0, ICU 58.1, V8 5.7.492.77, OpenSSL 1.0.2a 19 Mar 2015
2018-07-21T18:49:29Z [8352] INFO using storage engine mmfiles
2018-07-21T18:49:29Z [8352] INFO {cluster} Starting up with role SINGLE
2018-07-21T18:49:29Z [8352] INFO {authentication} Authentication is turned on (system only)
2018-07-21T18:49:29Z [8352] INFO running WAL recovery (1 logfiles)
2018-07-21T18:49:29Z [8352] INFO replaying WAL logfile 'C:\arangodb\var/lib/arangodb3\journals\logfile-2330.db' (1 of 1)
2018-07-21T18:49:29Z [8352] INFO WAL recovery finished successfully
2018-07-21T18:49:29Z [8352] INFO using endpoint 'http+tcp://127.0.0.1:8529' for non-encrypted requests
2018-07-21T18:49:30Z [8352] INFO ArangoDB (version 3.3.12 [win64]) is ready for business. Have fun!