11

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.

Bialecki
  • 30,061
  • 36
  • 87
  • 109

4 Answers4

23

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 &
Michael Aaron Safyan
  • 93,612
  • 16
  • 138
  • 200
7

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()
Shane C. Mason
  • 7,518
  • 3
  • 26
  • 33
4

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).

Alex Martelli
  • 854,459
  • 170
  • 1,222
  • 1,395
2

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

print foo.py &
Ignacio Vazquez-Abrams
  • 776,304
  • 153
  • 1,341
  • 1,358