2016-08-04 55 views
1

ich diesen ProzessNodeJS: Laufende Verfahren vor einem anderen Prozess erfolgt

recorder = spawn("avconv", ["-y", "-r", "30", "-g", "300", 
       "-f", "x11grab", 
       "-s", "1024x768", 
       "-i", process.env.DISPLAY, 
       "-vcodec", "qtrle", "my_videos/the_video.mov"]); 

Dieser Code verwendet die avconv Programm für die Aufzeichnung eines Videos in einem Knoten Programm habe ausgeführt wird. Das Problem ist es, dass nach der Aufzeichnung von Videos es fertig ist ich eine anderen Prozess muss ausgeführt wird, um die Ausgabedatei für den ersten Prozess

spawn("avconv", ["-y", 
      "-i","my_videos/the_video.mov", 
      "-filter:v", "'setpts=5.0*PTS'", 
      "my_videos/slowed_video.mov"]); 

Gibt es trotzdem verwenden, um ein Rohr für den ersten Prozess zum zweiten Prozess zu schaffen?

+0

Haben Sie versucht, spawnSync statt Laich? – randominstanceOfLivingThing

+0

Es ist nicht möglich, weil der erste Prozess meine Testsuite aufzeichnet, wenn die Testsuite fertig ist, dieser Prozess erledigt ist und ich den zweiten Prozess ausführen muss. –

Antwort

0

Basierend auf der API-Dokumentation spawn.

See:https://nodejs.org/api/child_process.html#child_process_class_childprocess

Sie sollten für den Prozess close Ereignis mit dem on api hören können.

Beispiel:

var AVCONV_OK = 0; // assuming 0 indicates SUCCESS, which what most executable reports. 

recorder = spawn("avconv", ["-y", "-r", "30", "-g", "300", 
       "-f", "x11grab", 
       "-s", "1024x768", 
       "-i", process.env.DISPLAY, 
       "-vcodec", "qtrle", "my_videos/the_video.mov"]); 

recorder.on('close', (returnCode) => { 
    if (returnCode === AVCONV_OK) { 
     // Spawn the 2nd process to do step 2. 
    } 
    else { 
     console.log("oops recording failed."); 
    } 
}); 

Hinweis: Der obige Code ist reine Pseudo nur, ich kann es nicht testen, da ich nicht avconv nicht benutzen.

Alternativ können Sie tun, was andere auf Kommentar vorgeschlagen. Verwenden Sie spawnSync, die ein Objekt zurückgibt, die Parameter wie status enthält und output usw.

So oder so fein ist, ist der einzige Vorteil async zu tun, dass Ihre NodeJS App noch auf andere Sachen arbeiten können, während Sie für avconv warten am Laufen zu beenden .

Für spawnSync siehe: https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options