1

私の Node.js (v0.10.9) コードでは、次の 2 つのケースを検出しようとしています。

  • 外部ツール(ドット)がインストールされている - その場合、作成されたプロセスの stdin にデータを送信したい
  • 外部ツールがインストールされていません - その場合、警告を表示したいのですが、プロセスの stdin には何も送信したくありません

私の問題は、プロセスが正常に生成された場合 (つまり、stdin が書き込みの準備ができている場合) にのみ、データを子の stdin に送信する方法がわからないことです。次のコードは、ドットがインストールされている場合は正常に機能しますが、それ以外の場合は、子が生成されていないにもかかわらず、子にデータを送信しようとします。

var childProcess = require('child_process');

var child = childProcess.spawn('dot');
child.on('error', function (err) {
  console.error('Failed to start child process: ' + err.message);
});
child.stdin.on('error', function(err) {
  console.error('Working with child.stdin failed: ' + err.message);
});

// I want to execute following lines only if child process was spawned correctly
child.stdin.write('data');
child.stdin.end();

私はこのようなものが必要だろう

child.on('successful_spawn', function () {
  child.stdin.write('data');
  child.stdin.end();
});
4

2 に答える 2

0

コアワーカーをご覧ください: https://www.npmjs.com/package/core-worker

このパッケージにより、プロセスの処理がはるかに簡単になります。あなたがやりたいことはそのようなものだと思います(ドキュメントから):

import { process } from "core-worker";

const simpleChat = process("node chat.js", "Chat ready");

setTimeout(() => simpleChat.kill(), 360000); // wait an hour and close the chat

simpleChat.ready(500)
    .then(console.log.bind(console, "You are now able to send messages."))
    .then(::simpleChat.death)
    .then(console.log.bind(console, "Chat closed"))
    .catch(() => /* handle err */);

したがって、プロセスが正しく開始されない場合、.then ステートメントは実行されません。まさにあなたがやりたいことですよね?

于 2015-12-15T10:07:47.940 に答える