2013-10-03 5 views
7

これは本当に怒っています。私は何か違法行為を行っているコードのどこにも見つからないが、何らかの理由でforkと呼ぶと私のプログラムが爆発する。ここにコードがあります。関連する部分はsvgToPNGにあり、私はforkと呼んでいます。Coffeescript予期しないトークンILLEGAL、違法なものはないはずです

{fork} = require 'child_process' 
{Coral} = require 'coral' 

svgToPNG = (svg, reply, log) -> 
    log "converting SVG to a PNG" 
    # set up a child process to call convert svg: png:- 
    convert = fork '/usr/bin/env', ['convert', 'svg:', 'png:-'] 
    log "Spawned child process running convert, pid " + convert.pid 
    # set up behavior when an error occurs 
    convert.stderr.on "data", -> 
    log "Error occurred while executing convert" 
    reply "error" 
    # set up behavior for when we successfully convert 
    convert.stdout.on "data", -> 
    log "Successful conversion! :)" 
    log "here's the data: " + data 
    reply data 
    # pipe the SVG into the stdin of the process (starting it) 
    convert.stdin.end svg 

私はforkラインを取り、何か他のものと交換した場合は、すべてがドーリー互角のですが、私はそれを残せば、私が手:

> coffee src/coral_client.coffee 
finished doing conversion to svg! 
converting SVG to a PNG 
Spawned child process running convert, pid 60823 

/usr/bin/grep:1 
(function (exports, require, module, __filename, __dirname) { ���� 
                  ^
SyntaxError: Unexpected token ILLEGAL 
    at Module._compile (module.js:439:25) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:901:3 

それは意味がありません。私はthis questionのような奇妙な違法なユニコードキャラクターを持っていません。私はどのような種類のパースエラーがあるとは思わないthis one ...私は本当に何が起こっているのか分かりません。

CoffeeScriptが何とかコードを壊している可能性はありますか?それは本当らしくないようですが、わかりません。

+0

どのファイルを変換していますか?それは 'svg:somefilename png:-'を変換するべきではありませんか? – hpaulj

+0

このスクリプトをコンパイルして、 'node'を使って' js'を実行しようとしましたか? 'js'がうまくいけば、問題はcoffeescriptではありません。 – hpaulj

+0

@hpaulj svgファイルはプロセスの標準入力にパイプされます。 –

答えて

2

forkのエラーが発生しています。 forkはノードプロセスを生成するためのもので、foo.jsファイルです。代わりにspawnを使用してください。

私はこれを、画像ファイルを読み込んでからsvgToPNGに渡して、コードを削除して実行してみました。エラーメッセージが起動します:

/usr/bin/env:1 
(function (exports, require, module, __filename, __dirname) { ELF 

ELFとしてこのコピー/ペーストにレンダリングされた文字は、私のバイナリ/usr/bin/envファイルの先頭文字です。したがってnode.jsfork/usr/bin/envファイルをコンパイルしようとしています。文書番号child_processを確認するとこれが確認されます。 lsgrepのようなものを実行している例はspawnです。

+0

優秀!トンありがとう! –

関連する問題