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.
4 Answers
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 &

- 93,612
- 16
- 138
- 200
-
1Where you say "stdin" I assume you mean "stderr" and it should be `2>errors.log` (without the ampersand after the "2"). – Dennis Williamson Jun 02 '10 at 04:09
-
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()

- 7,518
- 3
- 26
- 33
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).

- 854,459
- 170
- 1,222
- 1,395
Your jargon is all confused. But in bash you can run a process in the background by appending a &
:
print foo.py &

- 776,304
- 153
- 1,341
- 1,358