Skip to content
Advertisement

Run Process and Don’t Wait

I’d like to run a process and not wait for it to return. I’ve tried spawn with P_NOWAIT and subprocess like this:

app = "C:WindowsNotepad.exe"
file = "C:PathToFile.txt"

pid = subprocess.Popen(
    [app, file], 
    shell=True, 
    stdin=subprocess.PIPE, 
    stdout=subprocess.PIPE,
).pid

However, the console window remains until I close Notepad. Is it possible to launch the process and not wait for it to complete?

Advertisement

Answer

This call doesn’t wait for the child process to terminate (on Linux). Don’t ask me what close_fds does; I wrote the code some years ago. (BTW: The documentation of subprocess.Popen is confusing, IMHO.)

proc = Popen([cmd_str], shell=True,
             stdin=None, stdout=None, stderr=None, close_fds=True)

Edit:

I looked at the the documentation of subprocess, and I believe the important aspect for you is stdin=None, stdout=None, stderr=None,. Otherwise Popen captures the program’s output, and you are expected to look at it. close_fds makes the parent process’ file handles inaccessible for the child.

User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement