Как подключиться к nethack из Node.js?

Я только запускаю ИИ-бота для игры 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 и говорю ему запустить 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 (а не какой-либо другой язык или фреймворк, если возможно) я могу использовать для решения эта проблема?

5
задан chrisdotcode 22 March 2012 в 02:44
поделиться