2013-06-25 43 views
5

Tôi đang cố gắng đưa tiêu chuẩn & stdin của child_process vào trình duyệt & hiển thị nó trong trang html. Tôi đang sử dụng browserify để chạy node.js trên trình duyệt. Mã của tôi cho sinh sản child_process là như thế này.quá trình xử lý con đường ống stdout & stdin vào trình duyệt trong node.js & browserify

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('=========================='); 
}); 

Tôi đã tạo bundle.js bằng browserify và html của tôi trông như thế này.

<!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> 

Tôi đang cố gắng tránh chạy máy chủ http và kết quả đường dẫn đến nó trong trình duyệt. Có cách nào khác để tôi có thể làm được không? Cảm ơn

+0

vấn đề là gì? Bất kỳ thông báo lỗi nào? –

+0

vâng, vì vậy trong process.stdin trình duyệt & process.stdout là không xác định mà loại có ý nghĩa kể từ khi trình duyệt không được dự kiến ​​sẽ hỗ trợ nó. Nhưng tôi không chắc chắn làm thế nào để làm việc xung quanh nó – ssarangi

Trả lời

2

Bạn nên xem xét hyperwatch, ống dẫn máy chủ stdout/stderr tới trình duyệt và hiển thị chính xác như nó xuất hiện trong thiết bị đầu cuối của bạn (bao gồm cả màu).

Nếu nó không chính xác giải quyết vấn đề của bạn, đọc qua mã nên ít nhất là giúp bạn. Nó sử dụng hypernal dưới mui xe để chuyển đổi đầu ra thiết bị đầu cuối sang html.

+0

cảm ơn người đàn ông, thực sự đánh giá cao – stringparser

+0

Những thứ rất đẹp, với một ví dụ hoàn chỉnh và giấy phép mở :) cảm ơn bạn – Andrei

+0

Tôi nghĩ rằng mô-đun NPM frontail cũng có thể làm điều tương tự - https: // github.com/mthenw/frontail, tôi đã sử dụng nó và nó hoạt động –

1

Tôi không biết nếu điều này là muộn nhưng tôi quản lý để chạy một chương trình từ trình duyệt bắt đầu từ mã này chỉ hoạt động trên Linux (tôi sử dụng ubuntu). Bạn sẽ phải chạy các chương trình tương tác với tiền tố 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); 
}); 

Một sau đó để làm cho nó hoạt động trên trình duyệt của bạn chỉ cần thêm 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"); 
    }); 

Tôi hy vọng rằng sẽ giúp bạn.

0

Tôi nghĩ rằng mô-đun frontail NPM cũng có thể làm những gì bạn muốn làm -

https://github.com/mthenw/frontail

Tôi đã sử dụng nó và nó hoạt động

Các vấn đề liên quan