We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
bash_apps fail due to missing dir paths
I'm running into bash_app errors when I'm using `stdout=parsl.AUTO_LOGNAME`.
Here's the traceback:
```
2019-05-31 11:22:06 parsl.dataflow.dflow:251 [ERROR]  Task 0 failed
Traceback (most recent call last):
  File "/home/yadu/miniconda3/envs/mpi_executor/lib/python3.6/site-packages/parsl/dataflow/dflow.py", line 248, in handle_exec_update
    res.reraise()
  File "/home/yadu/miniconda3/envs/mpi_executor/lib/python3.6/site-packages/parsl/app/errors.py", line 163, in reraise
    reraise(t, v, tb)
  File "/home/yadu/.local/lib/python3.6/site-packages/six.py", line 692, in reraise
    raise value.with_traceback(tb)
  File "/home/yadu/miniconda3/envs/mpi_executor/lib/python3.6/site-packages/parsl/app/errors.py", line 172, in wrapper
    return func(*args, **kwargs)
  File "/home/yadu/miniconda3/envs/mpi_executor/lib/python3.6/site-packages/parsl/app/bash.py", line 79, in remote_side_bash_executor
    std_out = open_std_fd('stdout')
  File "/home/yadu/miniconda3/envs/mpi_executor/lib/python3.6/site-packages/parsl/app/bash.py", line 76, in open_std_fd
    raise pe.BadStdStreamFile(fname, e)
parsl.app.errors.BadStdStreamFile: FilePath: [/home/yadu/src/parsl/parsl/tests/manual_tests/runinfo/050/task_logs/0000/task_0000_sleeper_bash.stdout] Exception: [Errno 2] No such file or directory: '/home/yadu/src/parsl/parsl/tests/manual_tests/runinfo/050/task_logs/0000/task_0000_sleeper_bash.stdout'
```

I suspect this is coming from the our remote side bash wrapper, trying to open the stdout/stderr stream before we do makedirs on the dirname here 
 : https://github.com/Parsl/parsl/blob/master/parsl/app/bash.py#L72

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `parsl/app/bash.py`
Content:
```
1 import logging
2 from functools import update_wrapper
3 from inspect import signature, Parameter
4 
5 from parsl.app.errors import wrap_error
6 from parsl.app.futures import DataFuture
7 from parsl.app.app import AppBase
8 from parsl.dataflow.dflow import DataFlowKernelLoader
9 
10 logger = logging.getLogger(__name__)
11 
12 
13 def remote_side_bash_executor(func, *args, **kwargs):
14     """Execute the bash app type function and return the command line string.
15 
16     This string is reformatted with the *args, and **kwargs
17     from call time.
18     """
19     import os
20     import time
21     import subprocess
22     import logging
23     import parsl.app.errors as pe
24 
25     logging.basicConfig(filename='/tmp/bashexec.{0}.log'.format(time.time()), level=logging.DEBUG)
26 
27     # start_t = time.time()
28 
29     func_name = func.__name__
30 
31     partial_cmdline = None
32 
33     # Try to run the func to compose the commandline
34     try:
35         # Execute the func to get the commandline
36         partial_cmdline = func(*args, **kwargs)
37         # Reformat the commandline with current args and kwargs
38         executable = partial_cmdline.format(*args, **kwargs)
39 
40     except AttributeError as e:
41         if partial_cmdline is not None:
42             raise pe.AppBadFormatting("App formatting failed for app '{}' with AttributeError: {}".format(func_name, e))
43         else:
44             raise pe.BashAppNoReturn("Bash app '{}' did not return a value, or returned none - with this exception: {}".format(func_name, e), None)
45 
46     except IndexError as e:
47         raise pe.AppBadFormatting("App formatting failed for app '{}' with IndexError: {}".format(func_name, e))
48     except Exception as e:
49         logging.error("Caught exception during formatting of app '{}': {}".format(func_name, e))
50         raise e
51 
52     logging.debug("Executable: %s", executable)
53 
54     # Updating stdout, stderr if values passed at call time.
55 
56     def open_std_fd(fdname):
57         # fdname is 'stdout' or 'stderr'
58         stdfspec = kwargs.get(fdname)  # spec is str name or tuple (name, mode)
59         if stdfspec is None:
60             return None
61         elif isinstance(stdfspec, str):
62             fname = stdfspec
63             mode = 'a+'
64         elif isinstance(stdfspec, tuple):
65             if len(stdfspec) != 2:
66                 raise pe.BadStdStreamFile("std descriptor %s has incorrect tuple length %s" % (fdname, len(stdfspec)), TypeError('Bad Tuple Length'))
67             fname, mode = stdfspec
68         else:
69             raise pe.BadStdStreamFile("std descriptor %s has unexpected type %s" % (fdname, str(type(stdfspec))), TypeError('Bad Tuple Type'))
70 
71         try:
72             fd = open(fname, mode)
73             if os.path.dirname(fname):
74                 os.makedirs(os.path.dirname(fname), exist_ok=True)
75         except Exception as e:
76             raise pe.BadStdStreamFile(fname, e)
77         return fd
78 
79     std_out = open_std_fd('stdout')
80     std_err = open_std_fd('stderr')
81     timeout = kwargs.get('walltime')
82 
83     if std_err is not None:
84         print('--> executable follows <--\n{}\n--> end executable <--'.format(executable), file=std_err)
85 
86     returncode = None
87     try:
88         proc = subprocess.Popen(executable, stdout=std_out, stderr=std_err, shell=True, executable='/bin/bash')
89         proc.wait(timeout=timeout)
90         returncode = proc.returncode
91 
92     except subprocess.TimeoutExpired:
93         # print("Timeout")
94         raise pe.AppTimeout("[{}] App exceeded walltime: {}".format(func_name, timeout))
95 
96     except Exception as e:
97         # print("Caught exception: ", e)
98         raise pe.AppException("[{}] App caught exception: {}".format(func_name, proc.returncode), e)
99 
100     if returncode != 0:
101         raise pe.AppFailure("[{}] App failed with exit code: {}".format(func_name, proc.returncode), proc.returncode)
102 
103     # TODO : Add support for globs here
104 
105     missing = []
106     for outputfile in kwargs.get('outputs', []):
107         fpath = outputfile
108         if type(outputfile) != str:
109             fpath = outputfile.filepath
110 
111         if not os.path.exists(fpath):
112             missing.extend([outputfile])
113 
114     if missing:
115         raise pe.MissingOutputs("[{}] Missing outputs".format(func_name), missing)
116 
117     # exec_duration = time.time() - start_t
118     return returncode
119 
120 
121 class BashApp(AppBase):
122 
123     def __init__(self, func, data_flow_kernel=None, walltime=60, cache=False, executors='all'):
124         super().__init__(func, data_flow_kernel=data_flow_kernel, walltime=60, executors=executors, cache=cache)
125         self.kwargs = {}
126 
127         # We duplicate the extraction of parameter defaults
128         # to self.kwargs to ensure availability at point of
129         # command string format. Refer: #349
130         sig = signature(func)
131 
132         for s in sig.parameters:
133             if sig.parameters[s].default != Parameter.empty:
134                 self.kwargs[s] = sig.parameters[s].default
135 
136     def __call__(self, *args, **kwargs):
137         """Handle the call to a Bash app.
138 
139         Args:
140              - Arbitrary
141 
142         Kwargs:
143              - Arbitrary
144 
145         Returns:
146              If outputs=[...] was a kwarg then:
147                    App_fut, [Data_Futures...]
148              else:
149                    App_fut
150 
151         """
152         # Update kwargs in the app definition with ones passed in at calltime
153         self.kwargs.update(kwargs)
154 
155         if self.data_flow_kernel is None:
156             dfk = DataFlowKernelLoader.dfk()
157         else:
158             dfk = self.data_flow_kernel
159 
160         app_fut = dfk.submit(wrap_error(update_wrapper(remote_side_bash_executor, self.func)),
161                              self.func, *args,
162                              executors=self.executors,
163                              fn_hash=self.func_hash,
164                              cache=self.cache,
165                              **self.kwargs)
166 
167         out_futs = [DataFuture(app_fut, o, tid=app_fut.tid)
168                     for o in kwargs.get('outputs', [])]
169         app_fut._outputs = out_futs
170 
171         return app_fut
172
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/parsl/app/bash.py b/parsl/app/bash.py
--- a/parsl/app/bash.py
+++ b/parsl/app/bash.py
@@ -69,9 +69,9 @@
             raise pe.BadStdStreamFile("std descriptor %s has unexpected type %s" % (fdname, str(type(stdfspec))), TypeError('Bad Tuple Type'))
 
         try:
-            fd = open(fname, mode)
             if os.path.dirname(fname):
                 os.makedirs(os.path.dirname(fname), exist_ok=True)
+            fd = open(fname, mode)
         except Exception as e:
             raise pe.BadStdStreamFile(fname, e)
         return fd

{"golden_diff": "diff --git a/parsl/app/bash.py b/parsl/app/bash.py\n--- a/parsl/app/bash.py\n+++ b/parsl/app/bash.py\n@@ -69,9 +69,9 @@\n             raise pe.BadStdStreamFile(\"std descriptor %s has unexpected type %s\" % (fdname, str(type(stdfspec))), TypeError('Bad Tuple Type'))\n \n         try:\n-            fd = open(fname, mode)\n             if os.path.dirname(fname):\n                 os.makedirs(os.path.dirname(fname), exist_ok=True)\n+            fd = open(fname, mode)\n         except Exception as e:\n             raise pe.BadStdStreamFile(fname, e)\n         return fd\n", "issue": "bash_apps fail due to missing dir paths\nI'm running into bash_app errors when I'm using `stdout=parsl.AUTO_LOGNAME`.\r\nHere's the traceback:\r\n```\r\n2019-05-31 11:22:06 parsl.dataflow.dflow:251 [ERROR]  Task 0 failed\r\nTraceback (most recent call last):\r\n  File \"/home/yadu/miniconda3/envs/mpi_executor/lib/python3.6/site-packages/parsl/dataflow/dflow.py\", line 248, in handle_exec_update\r\n    res.reraise()\r\n  File \"/home/yadu/miniconda3/envs/mpi_executor/lib/python3.6/site-packages/parsl/app/errors.py\", line 163, in reraise\r\n    reraise(t, v, tb)\r\n  File \"/home/yadu/.local/lib/python3.6/site-packages/six.py\", line 692, in reraise\r\n    raise value.with_traceback(tb)\r\n  File \"/home/yadu/miniconda3/envs/mpi_executor/lib/python3.6/site-packages/parsl/app/errors.py\", line 172, in wrapper\r\n    return func(*args, **kwargs)\r\n  File \"/home/yadu/miniconda3/envs/mpi_executor/lib/python3.6/site-packages/parsl/app/bash.py\", line 79, in remote_side_bash_executor\r\n    std_out = open_std_fd('stdout')\r\n  File \"/home/yadu/miniconda3/envs/mpi_executor/lib/python3.6/site-packages/parsl/app/bash.py\", line 76, in open_std_fd\r\n    raise pe.BadStdStreamFile(fname, e)\r\nparsl.app.errors.BadStdStreamFile: FilePath: [/home/yadu/src/parsl/parsl/tests/manual_tests/runinfo/050/task_logs/0000/task_0000_sleeper_bash.stdout] Exception: [Errno 2] No such file or directory: '/home/yadu/src/parsl/parsl/tests/manual_tests/runinfo/050/task_logs/0000/task_0000_sleeper_bash.stdout'\r\n```\r\n\r\nI suspect this is coming from the our remote side bash wrapper, trying to open the stdout/stderr stream before we do makedirs on the dirname here \r\n : https://github.com/Parsl/parsl/blob/master/parsl/app/bash.py#L72\n", "before_files": [{"content": "import logging\nfrom functools import update_wrapper\nfrom inspect import signature, Parameter\n\nfrom parsl.app.errors import wrap_error\nfrom parsl.app.futures import DataFuture\nfrom parsl.app.app import AppBase\nfrom parsl.dataflow.dflow import DataFlowKernelLoader\n\nlogger = logging.getLogger(__name__)\n\n\ndef remote_side_bash_executor(func, *args, **kwargs):\n    \"\"\"Execute the bash app type function and return the command line string.\n\n    This string is reformatted with the *args, and **kwargs\n    from call time.\n    \"\"\"\n    import os\n    import time\n    import subprocess\n    import logging\n    import parsl.app.errors as pe\n\n    logging.basicConfig(filename='/tmp/bashexec.{0}.log'.format(time.time()), level=logging.DEBUG)\n\n    # start_t = time.time()\n\n    func_name = func.__name__\n\n    partial_cmdline = None\n\n    # Try to run the func to compose the commandline\n    try:\n        # Execute the func to get the commandline\n        partial_cmdline = func(*args, **kwargs)\n        # Reformat the commandline with current args and kwargs\n        executable = partial_cmdline.format(*args, **kwargs)\n\n    except AttributeError as e:\n        if partial_cmdline is not None:\n            raise pe.AppBadFormatting(\"App formatting failed for app '{}' with AttributeError: {}\".format(func_name, e))\n        else:\n            raise pe.BashAppNoReturn(\"Bash app '{}' did not return a value, or returned none - with this exception: {}\".format(func_name, e), None)\n\n    except IndexError as e:\n        raise pe.AppBadFormatting(\"App formatting failed for app '{}' with IndexError: {}\".format(func_name, e))\n    except Exception as e:\n        logging.error(\"Caught exception during formatting of app '{}': {}\".format(func_name, e))\n        raise e\n\n    logging.debug(\"Executable: %s\", executable)\n\n    # Updating stdout, stderr if values passed at call time.\n\n    def open_std_fd(fdname):\n        # fdname is 'stdout' or 'stderr'\n        stdfspec = kwargs.get(fdname)  # spec is str name or tuple (name, mode)\n        if stdfspec is None:\n            return None\n        elif isinstance(stdfspec, str):\n            fname = stdfspec\n            mode = 'a+'\n        elif isinstance(stdfspec, tuple):\n            if len(stdfspec) != 2:\n                raise pe.BadStdStreamFile(\"std descriptor %s has incorrect tuple length %s\" % (fdname, len(stdfspec)), TypeError('Bad Tuple Length'))\n            fname, mode = stdfspec\n        else:\n            raise pe.BadStdStreamFile(\"std descriptor %s has unexpected type %s\" % (fdname, str(type(stdfspec))), TypeError('Bad Tuple Type'))\n\n        try:\n            fd = open(fname, mode)\n            if os.path.dirname(fname):\n                os.makedirs(os.path.dirname(fname), exist_ok=True)\n        except Exception as e:\n            raise pe.BadStdStreamFile(fname, e)\n        return fd\n\n    std_out = open_std_fd('stdout')\n    std_err = open_std_fd('stderr')\n    timeout = kwargs.get('walltime')\n\n    if std_err is not None:\n        print('--> executable follows <--\\n{}\\n--> end executable <--'.format(executable), file=std_err)\n\n    returncode = None\n    try:\n        proc = subprocess.Popen(executable, stdout=std_out, stderr=std_err, shell=True, executable='/bin/bash')\n        proc.wait(timeout=timeout)\n        returncode = proc.returncode\n\n    except subprocess.TimeoutExpired:\n        # print(\"Timeout\")\n        raise pe.AppTimeout(\"[{}] App exceeded walltime: {}\".format(func_name, timeout))\n\n    except Exception as e:\n        # print(\"Caught exception: \", e)\n        raise pe.AppException(\"[{}] App caught exception: {}\".format(func_name, proc.returncode), e)\n\n    if returncode != 0:\n        raise pe.AppFailure(\"[{}] App failed with exit code: {}\".format(func_name, proc.returncode), proc.returncode)\n\n    # TODO : Add support for globs here\n\n    missing = []\n    for outputfile in kwargs.get('outputs', []):\n        fpath = outputfile\n        if type(outputfile) != str:\n            fpath = outputfile.filepath\n\n        if not os.path.exists(fpath):\n            missing.extend([outputfile])\n\n    if missing:\n        raise pe.MissingOutputs(\"[{}] Missing outputs\".format(func_name), missing)\n\n    # exec_duration = time.time() - start_t\n    return returncode\n\n\nclass BashApp(AppBase):\n\n    def __init__(self, func, data_flow_kernel=None, walltime=60, cache=False, executors='all'):\n        super().__init__(func, data_flow_kernel=data_flow_kernel, walltime=60, executors=executors, cache=cache)\n        self.kwargs = {}\n\n        # We duplicate the extraction of parameter defaults\n        # to self.kwargs to ensure availability at point of\n        # command string format. Refer: #349\n        sig = signature(func)\n\n        for s in sig.parameters:\n            if sig.parameters[s].default != Parameter.empty:\n                self.kwargs[s] = sig.parameters[s].default\n\n    def __call__(self, *args, **kwargs):\n        \"\"\"Handle the call to a Bash app.\n\n        Args:\n             - Arbitrary\n\n        Kwargs:\n             - Arbitrary\n\n        Returns:\n             If outputs=[...] was a kwarg then:\n                   App_fut, [Data_Futures...]\n             else:\n                   App_fut\n\n        \"\"\"\n        # Update kwargs in the app definition with ones passed in at calltime\n        self.kwargs.update(kwargs)\n\n        if self.data_flow_kernel is None:\n            dfk = DataFlowKernelLoader.dfk()\n        else:\n            dfk = self.data_flow_kernel\n\n        app_fut = dfk.submit(wrap_error(update_wrapper(remote_side_bash_executor, self.func)),\n                             self.func, *args,\n                             executors=self.executors,\n                             fn_hash=self.func_hash,\n                             cache=self.cache,\n                             **self.kwargs)\n\n        out_futs = [DataFuture(app_fut, o, tid=app_fut.tid)\n                    for o in kwargs.get('outputs', [])]\n        app_fut._outputs = out_futs\n\n        return app_fut\n", "path": "parsl/app/bash.py"}], "after_files": [{"content": "import logging\nfrom functools import update_wrapper\nfrom inspect import signature, Parameter\n\nfrom parsl.app.errors import wrap_error\nfrom parsl.app.futures import DataFuture\nfrom parsl.app.app import AppBase\nfrom parsl.dataflow.dflow import DataFlowKernelLoader\n\nlogger = logging.getLogger(__name__)\n\n\ndef remote_side_bash_executor(func, *args, **kwargs):\n    \"\"\"Execute the bash app type function and return the command line string.\n\n    This string is reformatted with the *args, and **kwargs\n    from call time.\n    \"\"\"\n    import os\n    import time\n    import subprocess\n    import logging\n    import parsl.app.errors as pe\n\n    logging.basicConfig(filename='/tmp/bashexec.{0}.log'.format(time.time()), level=logging.DEBUG)\n\n    # start_t = time.time()\n\n    func_name = func.__name__\n\n    partial_cmdline = None\n\n    # Try to run the func to compose the commandline\n    try:\n        # Execute the func to get the commandline\n        partial_cmdline = func(*args, **kwargs)\n        # Reformat the commandline with current args and kwargs\n        executable = partial_cmdline.format(*args, **kwargs)\n\n    except AttributeError as e:\n        if partial_cmdline is not None:\n            raise pe.AppBadFormatting(\"App formatting failed for app '{}' with AttributeError: {}\".format(func_name, e))\n        else:\n            raise pe.BashAppNoReturn(\"Bash app '{}' did not return a value, or returned none - with this exception: {}\".format(func_name, e), None)\n\n    except IndexError as e:\n        raise pe.AppBadFormatting(\"App formatting failed for app '{}' with IndexError: {}\".format(func_name, e))\n    except Exception as e:\n        logging.error(\"Caught exception during formatting of app '{}': {}\".format(func_name, e))\n        raise e\n\n    logging.debug(\"Executable: %s\", executable)\n\n    # Updating stdout, stderr if values passed at call time.\n\n    def open_std_fd(fdname):\n        # fdname is 'stdout' or 'stderr'\n        stdfspec = kwargs.get(fdname)  # spec is str name or tuple (name, mode)\n        if stdfspec is None:\n            return None\n        elif isinstance(stdfspec, str):\n            fname = stdfspec\n            mode = 'a+'\n        elif isinstance(stdfspec, tuple):\n            if len(stdfspec) != 2:\n                raise pe.BadStdStreamFile(\"std descriptor %s has incorrect tuple length %s\" % (fdname, len(stdfspec)), TypeError('Bad Tuple Length'))\n            fname, mode = stdfspec\n        else:\n            raise pe.BadStdStreamFile(\"std descriptor %s has unexpected type %s\" % (fdname, str(type(stdfspec))), TypeError('Bad Tuple Type'))\n\n        try:\n            if os.path.dirname(fname):\n                os.makedirs(os.path.dirname(fname), exist_ok=True)\n            fd = open(fname, mode)\n        except Exception as e:\n            raise pe.BadStdStreamFile(fname, e)\n        return fd\n\n    std_out = open_std_fd('stdout')\n    std_err = open_std_fd('stderr')\n    timeout = kwargs.get('walltime')\n\n    if std_err is not None:\n        print('--> executable follows <--\\n{}\\n--> end executable <--'.format(executable), file=std_err)\n\n    returncode = None\n    try:\n        proc = subprocess.Popen(executable, stdout=std_out, stderr=std_err, shell=True, executable='/bin/bash')\n        proc.wait(timeout=timeout)\n        returncode = proc.returncode\n\n    except subprocess.TimeoutExpired:\n        # print(\"Timeout\")\n        raise pe.AppTimeout(\"[{}] App exceeded walltime: {}\".format(func_name, timeout))\n\n    except Exception as e:\n        # print(\"Caught exception: \", e)\n        raise pe.AppException(\"[{}] App caught exception: {}\".format(func_name, proc.returncode), e)\n\n    if returncode != 0:\n        raise pe.AppFailure(\"[{}] App failed with exit code: {}\".format(func_name, proc.returncode), proc.returncode)\n\n    # TODO : Add support for globs here\n\n    missing = []\n    for outputfile in kwargs.get('outputs', []):\n        fpath = outputfile\n        if type(outputfile) != str:\n            fpath = outputfile.filepath\n\n        if not os.path.exists(fpath):\n            missing.extend([outputfile])\n\n    if missing:\n        raise pe.MissingOutputs(\"[{}] Missing outputs\".format(func_name), missing)\n\n    # exec_duration = time.time() - start_t\n    return returncode\n\n\nclass BashApp(AppBase):\n\n    def __init__(self, func, data_flow_kernel=None, walltime=60, cache=False, executors='all'):\n        super().__init__(func, data_flow_kernel=data_flow_kernel, walltime=60, executors=executors, cache=cache)\n        self.kwargs = {}\n\n        # We duplicate the extraction of parameter defaults\n        # to self.kwargs to ensure availability at point of\n        # command string format. Refer: #349\n        sig = signature(func)\n\n        for s in sig.parameters:\n            if sig.parameters[s].default != Parameter.empty:\n                self.kwargs[s] = sig.parameters[s].default\n\n    def __call__(self, *args, **kwargs):\n        \"\"\"Handle the call to a Bash app.\n\n        Args:\n             - Arbitrary\n\n        Kwargs:\n             - Arbitrary\n\n        Returns:\n             If outputs=[...] was a kwarg then:\n                   App_fut, [Data_Futures...]\n             else:\n                   App_fut\n\n        \"\"\"\n        # Update kwargs in the app definition with ones passed in at calltime\n        self.kwargs.update(kwargs)\n\n        if self.data_flow_kernel is None:\n            dfk = DataFlowKernelLoader.dfk()\n        else:\n            dfk = self.data_flow_kernel\n\n        app_fut = dfk.submit(wrap_error(update_wrapper(remote_side_bash_executor, self.func)),\n                             self.func, *args,\n                             executors=self.executors,\n                             fn_hash=self.func_hash,\n                             cache=self.cache,\n                             **self.kwargs)\n\n        out_futs = [DataFuture(app_fut, o, tid=app_fut.tid)\n                    for o in kwargs.get('outputs', [])]\n        app_fut._outputs = out_futs\n\n        return app_fut\n", "path": "parsl/app/bash.py"}]}