2012-06-08 10 views
7

child_process.spawn関数を使用しようとしています。構文はargJの1つにスペースがあると、nodeJS child_process.spawnが機能しません

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

のいずれかの引数配列にスペースを含めると、単に引数が出力されます。ここでは、私がそれをテストするために使用したいくつかのコードです

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()); 
}); 

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

上記のコードは単なる例に過ぎません。ここに実際のコードがあります。 多分パイプと関連がありますか?あなたは子プロセスからの迅速な診断出力を取得したい場合は私が見つけた便利な小さなショートカットが通過しているだけで、アレイ

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

に別の引数を使用し、argsにスペースを

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

Linux上でノード0.6.17をREPLで使用しているとうまく動作しているようです。ルートレベルで同じ名前のディレクトリを作成し、コードを使用しました。 –

+0

また、ファイルから作業しました。ノードのバージョンやOSなどの詳細情報を提供できますか? –

+0

実行しているノードのバージョンは? – joshuapoehls

答えて

22

を入れないでくださいoptions

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

{stdio: "inherit"}あなたはすべてがすぐに正常に動作しているかどうかを見ることができるこの方法。

最後に、supervisorがインストールされている場所によっては、完全なパスを使用することを検討することもできます。

var watcher = spawn("/path/to/supervisor", ...); 
+1

スポーンコールの中でコマンド置換を使用できるかどうか知っていますか? 'docker rm $(docker ps -a)'のようなもの –

+0

これはbashです。あなたはそれに 'exec 'を使います:' child_process.exec(' rm $(docker ps -a) '、{shell:'/bin/bash '}、console.log) ' – Dinoboff

+0

ファイル拡張子を一重引用符で囲む必要がありますか? – Dinoboff

関連する問題