2013-05-02 47 views
3

我運行CMD來產卵,但是如果你給我一個ping命令,我不能擺脫它,我怎麼能發送控制檯控制+ c,以避免這個?謝謝!如何在nodejs中產生CONTROL + C

var fs = require('fs'); 
var iconv = require('iconv-lite'); 
function sendData (msg) { 
    console.log('write msg ', msg); 
    cmd.stdin.write(msg + "\r\n"); 
} 
function execCommand() { 
    console.log('start command line') 
    var s = { 
     e : 'exec_command', 
     d : { 
      data : {} 
     } 
    }; 
    cmd = require('child_process').spawn('cmd', ['/K']); 

    cmd.stdout.on('data', function (data) { 
     console.log(iconv.decode(data, 'cp866')); 
    }); 

} 

execCommand(); 
sendData('ping e1.ru -t'); 
sendData(EXIT ???) 

????? 我想通過node.js製作一個控制檯,一個完整的控制檯。

sendData('dir'); 
sendData('cd /d Windows'); 
sendData('ping 8.8.8.8 -t'); 
senData(CONTROL + C); 
senData('dir') 
+0

備用方案:使用'''ping e1.ru -c 5'''來ping主機5次。 – booyaa 2013-05-02 07:52:09

+0

nonono!只有ping -t ... – 2013-05-02 09:15:55

回答

2

你要明確要求:

cmd.kill(); 

是會做的伎倆。如果您需要的CTRL-C相當於然後調用:

cmd.kill('SIGINT'); 

child_process.kill文檔的更多信息。

+1

沒有殺死進程!我必須做出一個止步不前,不殺生。 – 2013-05-02 09:15:32

+0

您是否期望通過子進程發送更多命令? – booyaa 2013-05-02 10:05:19

+0

這不完全確切。如果進程執行了'stdin'重定向,例如'std:cin'和'std :: cout <<「」<< data;',這會保持'stdin'打開,發送一個'child.kill('SIGINT' )'不起作用。注意。 'child.stdin.write('「\ x03」)'不會工作。 – loretoparisi 2017-05-04 18:30:10