我刚开始为游戏nethack
开发一个人工智能机器人,但是我无法绕过源代码中的“人类验证”。我指的是nethack/sys/unix/unixunix.c
代码中的一段:
#ifdef TTY_GRAPHICS
/* idea from rpick%ucqais@uccba.uc.edu
* prevent automated rerolling of characters
* test input (fd0) so that tee'ing output to get a screen dump still
* works
* also incidentally prevents development of any hack-o-matic programs
*/
/* added check for window-system type -dlc */
if (!strcmp(windowprocs.name, "tty"))
if (!isatty(0))
error("You must play from a terminal.");
#endif
我是一名JavaScript(更具体地说是Node.js)开发者,由于上述原因,即使我生成一个bash shell子进程并告诉它启动nethack,程序也不允许我玩游戏。我需要找到一种方法来绕过这个问题,而不必重新编译源代码。
我目前使用的代码如下:
"use strict";
var env = { TERM: 'tty' };
for (var k in process.env) {
env[k] = process.env[k];
}
var terminal = require('child_process').spawn('bash', [], {
env: env,
});
terminal.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
terminal.on('exit', function (code) {
console.log('child process exited with code ' + code);
});
setTimeout(function() {
terminal.stdin.write('nethack');
terminal.stdin.end();
}, 1000);
程序的输出为:
stdout: You must play from a terminal.
child process exited with code 1
我能用什么Node.js/JavaScript黑魔法(如果可能的话,不使用其他语言或框架)来解决这个问题?
tty.open()
方法,这可能是我想要的东西,但该方法使用了弃用的process.binding('stdio')
调用,我找不到任何文档。但我会去查阅相关线程的。谢谢。 - chrisdotcode