Sto appena iniziando un robot AI per il gioco nethack
, e non posso ignorare il 'controllo umano' che è nella fonte. La sezione di codice di cui sto parlando è nethack/sys/unix/unixunix.c
:Come connettersi a nethack da Node.js?
#ifdef TTY_GRAPHICS
/* idea from rpick%[email protected]
* 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
sto lavorando in JavaScript, (più precisamente Node.js), ed a causa di quanto sopra, non mi permette di giocare dal programma , anche se sto generando un processo figlio shell bash e dicendo di iniziare nethack
. Ho bisogno di capire un modo per aggirare il precedente senza ricompilare la fonte.
Il codice corrente che sto utilizzando è:
"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);
L'output del programma è:
stdout: You must play from a terminal.
child process exited with code 1
Che Node.js/JavaScript (e non qualsiasi altra lingua o di un quadro, se possibile) la magia nera posso usare per risolvere questo problema?
Non sono sicuro, potresti voler esaminare il [modulo TTY] del nodo (http://nodejs.org/api/tty.html). Inoltre, [questo thread] (http://groups.google.com/group/nodejs/browse_thread/thread/6fd25d16b250aa7d) potrebbe essere di interesse. –
Sì, ho controllato il modulo TTY: sembra che v0.6 + deprecano il metodo 'tty.open()', che potrebbe essere qualcosa che potrei volere, ma quel metodo usa un deprecato 'process.binding ('stdio') 'call, su cui non riesco a trovare alcuna documentazione. Controllerò comunque il thread. Grazie. – chrisdotcode