Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pipe child process stdout & stdin to browser in node.js & browserify

I am attempting to pipe the stdout & stdin of a child_process to a browser & display it in an html page. I am using browserify to get node.js to run on the browser. My code for spawning the child_process is like this.

var child = require('child_process');

var myREPL = child.spawn('myshell.exe', ['args']);

 // myREPL.stdout.pipe(process.stdout, { end: false });

 process.stdin.resume();

 process.stdin.pipe(myREPL.stdin, { end: false });

 myREPL.stdin.on('end', function() {
   process.stdout.write('REPL stream ended.');
 });

 myREPL.on('exit', function (code) {
   process.exit(code);
 });

 myREPL.stdout.on('data', function(data) {
    console.log('\n\nSTDOUT: \n');
    console.log('**************************');
    console.log('' + data);
    console.log('==========================');
 });

I created a bundle.js using browserify and my html looks like this.

<!doctype html>
    <html lang="en">
        <head>
            <meta charset="utf-8" />
            <title></title>
            <!--[if IE]>
            <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
            <![endif]-->
            <script src="bundle.js"></script>
            <script src="main.js"></script>
        </head>
        <body>

        </body>
    </html>

I am trying to avoid running an http server and piping the results to it in the browser. Is there any other way where I can do it ? Thanks

like image 755
ssarangi Avatar asked Jun 25 '13 22:06

ssarangi


1 Answers

You should look into hyperwatch, which pipes the server side stdout/stderr to the browser and renders it exactly like it would appear in your terminal (including colors).

If it doesn't exactly solve your problem, reading through the code should at least help you. It uses hypernal under the hood in order to convert terminal output to html.

like image 168
Thorsten Lorenz Avatar answered Oct 28 '22 19:10

Thorsten Lorenz