Nodejs:在另一个进程完成之前运行进程

时间:2016-08-04 01:03:38

标签: node.js asynchronous process pipe

我在节点程序中运行此过程

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

此代码使用avconv程序录制视频。问题是,在完成记录视频后,我需要运行另一个使用输出文件进行第一个过程的进程

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

是否有为第二个流程的第一个流程创建管道?

1 个答案:

答案 0 :(得分:0)

基于close API文档。

请参阅: https://nodejs.org/api/child_process.html#child_process_class_childprocess

您应该能够使用on api来监听流程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."); } }); 事件。

示例:

avconv

注意:以上代码仅为纯伪,我无法对其进行测试,因为我没有使用spawnSync

或者你可以像评论中的其他建议那样做。使用status返回包含outputavconv等参数的对象。

无论哪种方式都很好,执行异步的唯一好处是,当您等待spawnSync完成运行时,您的nodeJS应用仍然可以处理其他内容。

对于data.map(lambda x:len(x)).collect() >>> [13, 12] ,请参阅: https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options