2013-06-25 23 views
5

Próbuję potokować stdout & stdin z child_process do przeglądarki & wyświetlać go na stronie html. Używam przeglądarki browserify, aby uruchomić plik node.js w przeglądarce. Mój kod do odradzania child_process jest taki.potokowy proces potomny stdout & stdin do przeglądarki w node.js & browserify

Utworzono plik bundle.js za pomocą przeglądarki browserify, a mój HTML wygląda tak.

Próbuję uniknąć uruchamiania serwera http i przesyłania wyników do niego w przeglądarce. Czy mogę to zrobić w inny sposób? Dzięki

+0

czym problem? Jakieś komunikaty o błędach? –

+0

tak, więc w przeglądarce process.stdin i process.stdout są niezdefiniowane, co ma sens, ponieważ przeglądarka nie obsługuje go. Ale nie jestem pewien jak to obejść – ssarangi

Odpowiedz

2

Powinieneś zajrzeć do hyperwatch, która przechodzi po stronie serwera stdout/stderr do przeglądarki i wyświetla ją dokładnie tak, jak w terminalu (w tym kolory).

Jeśli problem nie rozwiązuje dokładnie problemu, przeczytanie kodu powinno ci przynajmniej pomóc. Używa pod maską hypernal, aby przekonwertować wyjście terminala na html.

+0

dziękuję człowiekowi, naprawdę doceniam – stringparser

+0

Bardzo ładne rzeczy, z pełnym przykładem i otwartą licencją :) dziękuję – Andrei

+0

Myślę, że moduł NPM frontail może zrobić to samo - https: // github.com/mthenw/frontail, użyłem go i działa –

1

Nie wiem, czy jest za późno, ale udało mi się uruchomić program z przeglądarki, zaczynając od tego kodu, który działa tylko na Linuksie (ja używam ubuntu). Będziesz musiał uruchomić interaktywne programy z prefiksem stdbuf -o0.

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); 
}); 

następnie, aby pracować w przeglądarce trzeba tylko dodać 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"); 
    }); 

Mam nadzieję, że pomoże.

Powiązane problemy