// Prepare NSTask
let pythontask = $.NSTask.alloc.init;
pythontask.setLaunchPath("/usr/bin/python3");
// Set up input and output pipes
const inputPipe = $.NSPipe.pipe;
const outputPipe = $.NSPipe.pipe;
const errorPipe = $.NSPipe.pipe;
pythontask.setStandardInput(inputPipe);
pythontask.setStandardOutput(outputPipe);
pythontask.setStandardError(errorPipe);
// Write input to the process
const inputHandle = inputPipe.fileHandleForWriting;
inputHandle.writeData(pythonData);
inputHandle.closeFile;
// Launch task
pythontask.launch;
pythontask.waitUntilExit;
// Read output
const outputHandle = outputPipe.fileHandleForReading;
const errorHandle = errorPipe.fileHandleForReading;
const outputData = outputHandle.readDataToEndOfFile;
const errorData = errorHandle.readDataToEndOfFile;
const outputString = $.NSString.alloc.initWithDataEncoding(outputData, $.NSUTF8StringEncoding);
const errorString = $.NSString.alloc.initWithDataEncoding(errorData, $.NSUTF8StringEncoding);
// Aggregate Response
let response1py = ObjC.unwrap(outputString);
let response2py = ObjC.unwrap(errorString);
let responsepy = response1py + response2py;
return {"user_output":responsepy, "completed": true};