Update Subprocess Handler

- Added param to return the script output instead of the exit code
- Reviewed uses of the function to make sure it would not intro problems
- Updated pdabHandler with the new param as it uses 'pcwd' as well
This commit is contained in:
Logan Cusano
2024-05-13 00:40:08 -04:00
parent 3950d57b7f
commit 7fb67f6ddf
2 changed files with 11 additions and 5 deletions

View File

@@ -22,7 +22,7 @@ let botCallback;
export const initDiscordBotClient = (clientId, callback, runPDAB = true) => {
botCallback = callback;
if (runPDAB) launchProcess("python", [join(__dirname, "./pdab/main.py"), process.env.AUDIO_DEVICE_ID, clientId, port], false, join(__dirname, "./pdab"));
if (runPDAB) launchProcess("python", [join(__dirname, "./pdab/main.py"), process.env.AUDIO_DEVICE_ID, clientId, port], false, false, join(__dirname, "./pdab"));
pdabProcess = true; // TODO - Make this more dynamic
}

View File

@@ -13,8 +13,10 @@ const runningProcesses = {};
* @param {string} processName - The name of the process to launch.
* @param {string[]} args - The arguments to pass to the process.
* @param {boolean} waitForClose - Set this to wait to return until the process exits
* @param {boolean} returnOutput - Set this in addition to 'waitForClose' to return the script output when the process closes
* @param {boolean} waitForClose - Set the current working directory of the process being launched
*/
export const launchProcess = (processName, args, waitForClose = false, pcwd = undefined) => {
export const launchProcess = (processName, args, waitForClose = false, returnOutput = false, pcwd = undefined) => {
if (!runningProcesses[processName]) {
let childProcess;
if (pcwd) {
@@ -44,18 +46,22 @@ export const launchProcess = (processName, args, waitForClose = false, pcwd = un
scriptOutput += data.toString();
})
let code = new Promise(res => {
let output = new Promise(res => {
childProcess.on('exit', (code, signal) => {
// Remove reference to the process when it exits
delete runningProcesses[processName];
console.log(`${processName} process exited with code ${code} and signal ${signal}`);
console.log("Child process console output: ", scriptOutput);
res(code);
// Return the full script output if requested
if (returnOutput === true) {
return res(scriptOutput)
}
return res(code);
})
});
if (waitForClose === true) {
return code
return output
}
console.log(`${processName} process started.`);