0

バットが 1 つの端末のみを実行する場合、stdout を取得できますが、これが新しいウィンドウを開くと失敗します。

    var terminal = require('child_process').spawn('aa.bat');
    console.log('Starting..terminal.pid.', terminal.pid, "process.pid", process.pid);
    terminal.stdout.on('data', function(data) {
        console.log('stdout:',data);
    });
    terminal.stderr.on('data', function(data) {
        console.log('stderr:',data);
    });
    terminal.on('uncaughtException', function(err) {
        console.log('Caught exception: ' + err);
    });
    terminal.on('exit', function(code) {
        console.log('exit code:', code, ' terinal.pid.', terminal.pid, "process.pid", process.pid);
        console.log('child process', process.pid, 'exited with code ' + code);
    });

このようなバットファイルを推定

start  cmd 

に変更すると

start /b cmd

これは新しいターミナルを開かず、nodeJsは機能します

4

1 に答える 1

0

Windows OS で NodeJS から別のプロセス stdout を取得するのは難しく、多くの場合、新しいターミナル ウィンドウが開きます。ただし、bash を使用して起動できます。

1. http://www.steve.org.uk/Software/bash/からダウンロードできる bash.exe の場合 、コードは次のようになります。

    var terminal = require('child_process');
    function start() {
            if (process.platform.trim() !== 'win32') {
                terminal = terminal.spawn('bash');
                console.log('This is not the win32 plantform ,please confirm the bash woking!');
            } else {
                terminal = terminal.spawn('./bash-2.03/bash.exe');
            }
            // !!!must append the ./
            //terminal.stdin.write('./aa.exe');
            terminal.stdin.write('./aa.bat');
            terminal.stdin.end();
        };
        start();
        terminal.stdout.on('data', function(data) {
            console.log(data + "");
        });
        terminal.stdout.on('error', function(data) {
            console.log('error:\n' + data);
        });
        terminal.on('uncaughtException', function(err) {
            console.log('Caught exception: ' + err);
        });
        terminal.on('exit', function(code) {
            console.log('exit code:', code, ' terinal.pid.', terminal.pid, "process.pid", process.pid);
            console.log('child process', process.pid, 'exited with code ' + code);
        });
于 2013-03-13T00:51:14.727 に答える