Bialecki
Bialecki

Reputation: 31041

Run python in a separate process

I'm looking for a quick bash script or program that will allow me to kick off a python script in a separate process. What's the best way to do this? I know this is incredibly simple, just curious if there's a preferred way to do it.

Upvotes: 11

Views: 17817

Answers (4)

Michael Aaron Safyan
Michael Aaron Safyan

Reputation: 95489

Just use the ampersand (&) in order to launch the Python process in the background. Python already is executed in a separate process from the BASH script, so saying to run it "in a separate thread" doesn't make much sense -- I'm assuming you simply want it to run in the background:

#! /bin/bash
python path/to/python/program.py &

Note that the above may result in text being printed to the console. You can get around this by using redirection to redirect both stdout and stderr to a file. For example:

#! /bin/bash
python path/to/python/program.py > results.txt 2> errors.log &

Upvotes: 23

Alex Martelli
Alex Martelli

Reputation: 881555

bash doesn't really do threads -- it does do processes just fine, though:

python whatever.py &

the & at the end just means "don't wait for the subprocess to end" -- bash will execute the command itself in a separate process anyway, it's just that normally it waits for that separate process to terminate (all Unix shells work that way since time immemorial).

Upvotes: 4

Shane C. Mason
Shane C. Mason

Reputation: 7615

The best way to do this is to do it in python! Have a look at the multiprocess libraries.

Here is a simple example from the links above:

from multiprocessing import Process

def f(name):
    print 'hello', name

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

Upvotes: 8

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 798556

Your jargon is all confused. But in bash you can run a process in the background by appending a &:

print foo.py &

Upvotes: 2

Related Questions