def process_task(body): new_stdin = sys.stdin try: fileno = sys.stdin.fileno() if fileno is not None: try: new_stdin = os.fdopen(os.dup(fileno)) except OSError, e: # couldn't dupe stdin, most likely because it's # not a valid file descriptor, so we just rely on # using the one that was passed in pass except ValueError: # couldn't get stdin's fileno, so we just carry on pass shared_loader_obj = SharedPluginLoaderObj() loader = DataLoader(vault_password=None) task_json = json.loads(body) loader.set_basedir(task_json['base_dir']) host = jsonpickle.decode(task_json['host']) task = jsonpickle.decode(task_json['task']) job_vars = jsonpickle.decode(task_json['task_vars']) connection_info = jsonpickle.decode(task_json['conn_info']) task.set_loader(loader) new_connection_info = connection_info.set_task_and_host_override(task=task, host=host) executor_result = TaskExecutor(host, task, job_vars, new_connection_info, new_stdin, loader, shared_loader_obj).run() task_result = TaskResult(host, task, executor_result) task_pickled = jsonpickle.encode(task_result) return(json.dumps(task_pickled))