2017-10-15 5 views
0

Ich versuche ripgrep von meiner Node-App auszuführen und sehe ein seltsames Verhalten mit child_process.spawn: Keines der Ereignisse wird ausgelöst und die App wird nie beendet (sie befindet sich irgendwo im Spawn-Aufruf):child_process.spawn gibt keine Ereignisse aus

import { spawn } from 'child_process'; 

async function run() { 
    await spawnWrapper('rg', ['-F', '"demo"'], { cwd: __dirname }); 
} 

export function spawnWrapper(command, args, options) { 
    return new Promise((resolve, reject) => { 
     let stdout = ''; 
     let stderr = ''; 
     const child = spawn(command, args, options); 
     console.log('spawn wrapper'); 

     child.on('close', (code, signal) => { 
      console.log('close'); 
      resolve({ code, signal, stdout, stderr }); 
     }); 

     child.on('error', (error) => { 
      console.log('error'); 
      (error as any).stderr = stderr; 
      reject(error); 
     }); 

     child.on('exit', (code, signal) => { 
      console.log('exit'); 
      resolve({ code, signal, stdout, stderr }); 
     }); 

     child.stdout.setEncoding('utf8'); 
     child.stderr.setEncoding('utf8'); 

     child.stdout.on('data', (data) => { 
      console.log('stdout data'); 
      stdout += data; 
     }); 

     child.stderr.on('data', (data) => { 
      console.log('stderr data'); 
      stderr += data; 
     }); 
    }); 
} 

Ich bekomme nur "Spawn Wrapper" in der Konsole, keine anderen Ereignisse. Ich habe dieses Verhalten nie mit anderen Binärdateien gesehen, vielleicht ist es etwas mit ripgrep, aber sollte ich nicht wenigstens ein paar Hinweise von Node bekommen? Irgendwelche Vorschläge, wie man das debuggt?

+0

Sie können einen lokalen Debugger verwenden und setzen Sie es auf alle JS Ausnahmen zu brechen, sollte es Ihnen zeigen, was den Code dann scheitert. – niklon

+0

https://gist.github.com/Stuk/6226938 Dieser Beispiel-Wrapper um child_process verwendet das close-Ereignis nicht, vielleicht ist es nicht notwendig? Hier ist ein weiteres Beispiel für eine solche Klasse https://github.com/mgenware/promised-spawn – niklon

Antwort

Verwandte Themen