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?这是不可能的,因为第一个进程记录了我的测试套件,当测试套件完成时,这个过程完成了,然后我需要运行第二个过程。