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) => { export const initDiscordBotClient = (clientId, callback, runPDAB = true) => {
botCallback = callback; 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 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} processName - The name of the process to launch.
* @param {string[]} args - The arguments to pass to the process. * @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} 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]) { if (!runningProcesses[processName]) {
let childProcess; let childProcess;
if (pcwd) { if (pcwd) {
@@ -44,18 +46,22 @@ export const launchProcess = (processName, args, waitForClose = false, pcwd = un
scriptOutput += data.toString(); scriptOutput += data.toString();
}) })
let code = new Promise(res => { let output = new Promise(res => {
childProcess.on('exit', (code, signal) => { childProcess.on('exit', (code, signal) => {
// Remove reference to the process when it exits // Remove reference to the process when it exits
delete runningProcesses[processName]; delete runningProcesses[processName];
console.log(`${processName} process exited with code ${code} and signal ${signal}`); console.log(`${processName} process exited with code ${code} and signal ${signal}`);
console.log("Child process console output: ", scriptOutput); 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) { if (waitForClose === true) {
return code return output
} }
console.log(`${processName} process started.`); console.log(`${processName} process started.`);