Python subprocess.call not waiting for process to finish blender Python subprocess.call not waiting for process to finish blender shell shell

Python subprocess.call not waiting for process to finish blender


You can use subprocess.call to do exactly that.

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None)

Run the command described by args. Wait for command to complete, then return the returncode attribute.

Edit: I think I have a hunch on what's going on. The command works on your Mac because Macs, I believe, support Bash out of the box (at least something functionally equivalent) while on Windows it sees your attempt to run a ".sh" file and instead fires up Git Bash which I presume performs a couple forks when starting.

Because of this Python thinks that your script is done, the PID is gone.

If I were you I would do this:

  • Generate a unique, non-existing, absolute path in your "launching" script using the tempfile module.
  • When launching the script, pass the path you just made as an argument.
  • When the script starts, have it create a file at the path. When done, delete the file.
  • The launching script should watch for the creation and deletion of that file to indicate the status of the script.

Hopefully that makes sense.


You can use Popen.communicate API.

p1 = subprocess.Popen(os.path.abspath('D:/Test/run-my-script.sh'),shell=True)sStdout, sStdErr = p1.communicate()

The command

Popen.communicate(input=None, timeout=None)

Interact with process: Send data to stdin. Read data from stdout and stderr, until end-of-file is reached. Wait for the process to terminate.


subprocess.run will by default wait for the process to finish.