2013-10-03 12 views
7

Questo è davvero esasperante. Non riesco a trovare da nessuna parte nel mio codice dove sto facendo qualcosa di illegale, ma per qualche ragione, chiamando fork fa esplodere il mio programma. Ecco il codice. La parte relativa è in svgToPNG, dove chiamo fork.Token imprevisto di Coffeescript ILLEGAL, ma non ci dovrebbe essere nulla di illegale

{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 

Se prendo la linea fork fuori e sostituirlo con qualcosa d'altro, tutto è Hunky Dory, ma se lo lascio a, ottengo:

> 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 

non ha senso. Non ho alcun strano carattere unicode illegale come in this question, non credo di avere alcun tipo di errore di analisi come in this one ... Non so davvero cosa sta succedendo.

Potrebbe essere che CoffeeScript stia in qualche modo infrangendo il codice? Sembra davvero improbabile, ma non lo so.

+0

Quale file stai convertendo? Non dovrebbe essere 'convert svg: somefilename png: -'? – hpaulj

+0

Hai provato a compilare questo script, quindi esegui 'js' con' node'? Se il 'js' sembra buono allora il problema non è con il coffeescript. – hpaulj

+0

@hpaulj il file svg viene reindirizzato nello standard input del processo. –

risposta

2

L'errore è nell'uso di fork. fork serve per generare i processi dei nodi, ovvero i file foo.js. Utilizzare invece spawn.

L'ho capito eseguendo una versione ridotta del codice, leggendo un file immagine e quindi passandolo al numero svgToPNG. Il messaggio di errore inizia:

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

I personaggi resi in questo copia/incolla come ELF sono i personaggi testa del mio file binario /usr/bin/env. Quindi node.jsfork sta tentando di compilare il file /usr/bin/env. Revisione della documentazione child_process conferma questo. Gli esempi che eseguono cose come ls e grep utilizzano spawn.

+0

Eccellente! Grazie mille! –

Problemi correlati