Looks like your api/manage.py doesn’t have a shebang ([Wikipedia]: Shebang (Unix)), so the default (current) command processor (a shell – typically bash) is attempting to run it, which (obviously) fails.
To correct the problem, add a shebang (at the beginning of the file, making sure that your editor adds the Nix style line ending (\n, 0x0A, LF)):
-
Default Python installation:
#!/usr/bin/env python
-
Variant (specify Python 3 explicitly):
#!/usr/bin/env python3
-
-
Custom Python installation:
#!/full/path/to/your/custom/python/executable
Note that you also need exec permissions on the file (chmod +x api/manage.py
).
Example:
[cfati@cfati-5510-0:/cygdrive/e/Work/Dev/StackOverflow/q055271912]> ~/sopr.sh ### Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ### [064bit prompt]> ls code00.py code01.py [064bit prompt]> [064bit prompt]> cat code00.py print("This is:", __file__) [064bit prompt]> python3 -c "import os, subprocess;subprocess.Popen(os.path.join(os.getcwd(), \"code00.py\")).communicate()" Traceback (most recent call last): File "<string>", line 1, in <module> File "/usr/lib/python3.6/subprocess.py", line 709, in __init__ restore_signals, start_new_session) File "/usr/lib/python3.6/subprocess.py", line 1344, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) OSError: [Errno 8] Exec format error: '/cygdrive/e/Work/Dev/StackOverflow/q055271912/code00.py' [064bit prompt]> [064bit prompt]> cat code01.py #!/usr/bin/env python3 print("This is:", __file__) [064bit prompt]> python3 -c "import os, subprocess;subprocess.Popen(os.path.join(os.getcwd(), \"code01.py\")).communicate()" This is: /cygdrive/e/Work/Dev/StackOverflow/q055271912/code01.py
Another way would be to run the interpreter followed by the file name, but I don’t know how to do it from Flask – actually that would require patching Werkzeug (_reloader.py: _get_args_for_reloading), but that would be just a lame workaround (gainarie) – see below.
Update #0
Looking at @AxelGrytt’s answer, it turns out it’s a known issue: [GitHub]: pallets/werkzeug – 0.15.0 causes OSError: [Errno 8] Exec format error: in Docker for Windows (hmm, submitted in the same day as this question (and 2 days after the release) 🙂 ).
So, what I have stated above is correct, but it is worth mentioning that there is another way of fixing it: removing the exec permission for the file:
chmod -x api/manage.py
According to Werkzeug authors, from now on, this is desired behavior (also applies to v0.15.2):
- A file with exec permission set, should also have a shebang
- A file without a shebang, shouldn’t have the exec permission set