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

Node.js Nodejs:在完成另一个进程之前运行进程,node.js,asynchronous,process,pipe,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"]

我已经在一个节点程序中运行了这个过程

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"]);

是否要为第一个进程到第二个进程创建管道?

基于
spawn
API文档。

请参见:

您应该能够使用api上的
,监听流程
close
事件

例如:

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
output
等参数

无论哪种方式都可以,使用async的唯一好处是,当您等待
avconv
完成运行时,您的nodeJS应用程序仍然可以处理其他内容

有关
spawnSync
的信息,请参阅:

基于
spawn
API文档。

请参见:

您应该能够使用
api上的
,监听流程
close
事件

例如:

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
output
等参数

无论哪种方式都可以,使用async的唯一好处是,当您等待
avconv
完成运行时,您的nodeJS应用程序仍然可以处理其他内容

有关
spawnSync
的信息,请参阅:

您是否尝试了spawnSync而不是spawn?这是不可能的,因为第一个进程记录了我的测试套件,当测试套件完成时,此进程完成,然后我需要运行第二个进程。您是否尝试了spawnSync而不是spawn?这是不可能的,因为第一个进程记录了我的测试套件,当测试套件完成时,这个过程完成了,然后我需要运行第二个过程。