8

I've seen a ton of questions for the opposite of this which I find odd because I can't keep my subprocess from closing but is there a way to call subprocess.Popen and make sure that it's process stays running after the calling python script exits?

My code is as follows:

dname = os.path.dirname(os.path.abspath(__file__))
script = '{}/visualizerUI.py'.format(dname)
self.proc = subprocess.Popen(['python', script, str(width), str(height), str(pixelSize)], stdout=subprocess.PIPE)

This opens the process just fine, but when I close out of my script (either because it completes or with Ctrl+C) it also closes the visualizerUI.py subprocess, but I want it to stay open. Or at least have the option.

What am I missing?

Adam Haile
  • 30,705
  • 58
  • 191
  • 286

2 Answers2

2

Remove stdout=subprocess.PIPE and add shell=True so that it gets spawned in a subshell that can be detached.

synthesizerpatel
  • 27,321
  • 5
  • 74
  • 91
2

Another option would be to use:

import os
os.system("start python %s %s %s %s" % (script, str(width), str(height), str(pixelSize)))

To start your new python script in a new process with a new console.

Edit: just saw that you are working on a Mac, so yeah I doubt this will work for you.

How about:

import os
import platform

operating_system = platform.system().lower()
if "windows" in operating_system:
    exe_string = "start python"
elif "darwin" in operating_system:
    exe_string = "open python"
else:
    exe_string = "python"
os.system("%s %s %s %s %s" % (exe_string, script, str(width),
          str(height), str(pixelSize))))
derricw
  • 6,757
  • 3
  • 30
  • 34
  • I'm targeting Mac, Windows AND Linux... so it needs to work everywhere. – Adam Haile Aug 04 '14 at 21:19
  • apparently on a Mac the equivalent command is "open", but I don't have one nearby to test. – derricw Aug 04 '14 at 21:24
  • I'm doing this in a FastAPI program, launched using uvicorn. As soon as the program terminates, the process I launched does too. even with nohup ... & put on it. – Nikhil VJ Jul 02 '22 at 18:04