15

関数を使おうとしていchild_process.spawnます。構文は

child_process.spawn(command, args=[], [options])

args配列の要素のいずれかにスペースを含めると、コマンドは単に引数を発行します。これが私がそれをテストするために使用したいくつかのコードです

var spawn = require("child_process").spawn

console.log("This works");
var watcher = spawn("ls", ["-l"]);
watcher.stdout.on('data', function(data) {
    process.stdout.write(data.toString());
});

console.log("This does not work");
watcher = spawn("ls", ["-l", "/path with space in it"]);
watcher.stdout.on('data', function(data) {
    process.stdout.write(data.toString());
});

これはノードのバグですか?スペースを脱出する必要がありますか?

編集:上記のコードは単なる例です。これが実際のコードです。多分パイプと関係がありますか?

watcher = spawn("supervisor", ["--extensions\ 'coffee|js|css|coffeekup'", "src/app.coffee"]);
4

1 に答える 1

32

にスペースを入れないでくださいargs。配列内の別の引数を使用してください。

var watcher = spawn("supervisor", [
  "--extensions",
  "'coffee|js|css|coffeekup'",
  "src/app.coffee"
]);

子プロセスから迅速な診断出力を取得したい場合に見つけた便利な小さなショートカットは{stdio: "inherit"}options

var watcher = spawn("supervisor", [
  "--extensions",
  "'coffee|js|css|coffeekup'",
  "src/app.coffee"
], {stdio: "inherit"});

このようにして、すべてが正しく機能しているかどうかをすぐに確認できます。

最後に、supervisorがインストールされている場所によっては、フル パスの使用を検討することをお勧めします。

var watcher = spawn("/path/to/supervisor", ...);
于 2013-02-05T06:23:27.227 に答える