2013-06-25 11 views
5

Ich versuche, die stdout & stdin eines child_process zu einem Browser & in einer HTML-Seite anzuzeigen. Ich verwende browserify, um node.js im Browser laufen zu lassen. Mein Code zum Erzeugen des child_process ist wie folgt.pipe Kind Prozess stdout & stdin Browser in node.js & browserify

Ich habe ein bundle.js mit browserify erstellt und mein HTML sieht so aus.

Ich versuche zu vermeiden, einen http-Server laufen und die Ergebnisse in den Browser leiten. Gibt es einen anderen Weg, wo ich es tun kann? Danke

+0

Was ist das Problem? Irgendwelche Fehlermeldungen? –

+0

yeah, also im browser process.stdin & process.stdout sind undefined, welche Art von sinnvoll ist, da der Browser nicht erwartet wird, es zu unterstützen. Aber ich bin mir nicht sicher, wie man damit umgehen kann – ssarangi

Antwort

2

Sie sollten in hyperwatch schauen, die die Server-Seite stdout/stderr zum Browser pumpt und es genau so darstellt, wie es in Ihrem Terminal (einschließlich Farben) erscheinen würde.

Wenn es Ihr Problem nicht genau löst, sollte Ihnen das Lesen des Codes zumindest helfen. Es verwendet hypernal unter der Haube, um Terminal-Ausgabe in HTML zu konvertieren.

+0

danke Mann, wirklich geschätzt – stringparser

+0

Sehr nette Sachen, mit einem vollständigen Beispiel und Open-Lizenz :) danke – Andrei

+0

Ich denke, das Front-NPM-Modul kann auch das gleiche tun - https: // github.com/mthenw/fronttail, ich habe es benutzt und es funktioniert –

1

Ich weiß nicht, ob das zu spät ist, aber ich habe es geschafft, ein Programm vom Browser ausgehend von diesem Code, der nur auf Linux funktioniert (ich benutze Ubuntu). Sie müssen interaktive Programme mit dem Präfix stdbuf -o0 ausführen.

var child = require('child_process'); 
var myREPL = child.spawn('bash'); 

process.stdin.pipe(myREPL.stdin); 

myREPL.stdin.on("end", function() { 
    process.exit(0); 
}); 

myREPL.stdout.on('data', function (data) { 
    console.log(data+''); 
}); 

myREPL.stderr.on('data', function (data) { 
    console.log('stderr: ' + data); 
}); 

Ein dann auf Browser zu machen arbeiten Sie brauchen nur Socket.io

var myREPL = child.spawn(program); 
    myREPL.stdin.on("end", function() { 
     socket.emit('consoleProgramEnded'); 
    }); 

    myREPL.stdout.on('data', function (data) { 
     socket.emit('consoleWrite',data+''); 
    }); 

    myREPL.stderr.on('data', function (data) { 
     socket.emit('consoleWrite',data+''); 
    }); 

    socket.on('consoleRead',function(message){ 
     console.log("Writing to console:"+message); 
     myREPL.stdin.write(message.replace("<br>","")+"\n"); 
    }); 

ich, dass Ihnen helfen, hoffen hinzuzufügen.