node js child spawn stdin stdout exe communication

时间:2014-12-18 20:01:51

标签: node.js stdin child-process

我正在尝试与node.js中的Windows EXE进行通信。我是Node.js的新手

使用此示例作为起点,但我无法使其工作。
http://juristr.com/blog/2014/03/integrating-node-with-csharp/

看起来可执行文件未启动,因为.connected在运行时为false。 我没有看到可执行文件的启动位置和方式。

EXE代码(从命令行运行它工作正常,返回输入的内容)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LibraryExe
{
  class Program
  {
    static void Main(string[] args)
    {
      string line;
      do
      {
        line = Console.ReadLine();
        try
        {
          Console.WriteLine("Recieved - " + line);
          if (line == "quit")
            break;
        }
        catch (Exception e)
        {
          Console.WriteLine(e.Message);
        }
      } while (line != null);
    }
  }
}

Node.js代码(似乎没有启动exe,connected = false)

    console.log('Hello world');

    var spawn = require('child_process').spawn;
    var posProc = spawn('C:/path/LibraryExe.exe', []);

    posProc.stdout.once('data', function (data) {
        // write it back on the response object
        console.log('stdOut');
        writeToResponse('we got back ' + data);
    });

    posProc.on('exit', function (code) {
        console.log('Closed');
        writeToResponse('Library closed');
    });

    posProc.stdout.on('data', function (data) {
        console.log('stdout: ' + data);
    });

    if (posProc.connected)
        console.log('connected');
    else
        console.log('not connected');

    posProc.stdin.setEncoding = 'utf-8';
    posProc.stdin.write('Hello');
    posProc.stdin.write('quit');
    console.log('ending');

1 个答案:

答案 0 :(得分:4)

您的C#代码正在尝试读取,但您没有将任何CRLF对写入stdin流。试试这个:

posProc.stdin.write('Hello\r\n');
posProc.stdin.write('quit\r\n');