[Tutor] os.system() problem

Eric Brunson brunson at brunson.com
Mon Feb 4 18:12:25 CET 2008


dave selby wrote:
> Hi all,
>
> I am not sure if this is a Python or bash issue :).
>
> In bash if I execute 'motion' with the following ...
>
> dave at dev-machine:~/.kde/share/apps/kmotion$ motion &> /dev/null &
> [1] 10734
> dave at dev-machine:~/.kde/share/apps/kmotion$
>
> I get what I expect, a background job, however if I execute it from
> Python with an os.system ...
>
> os.system('motion &> /dev/null &')
>   

This happens because &> and & are shell constructs, they are bash 
specific shell syntax for "redirect stderr and stdout" and "put this job 
in the background".  But os.system simply calls the OS's "system(3)" 
call, which under linux calls "/bin/sh".  If you read the docs for bash, 
calling it as "sh" results in POSIX compliance mode and falls back to 
Bourne shell's less rich syntax, so it doesn't understand the "&>" 
construct.  If I had to guess at the parsing, I imagine it runs the 
"motion &" as one process in the background, then "> /dev/null &" as a 
second.

Long story short, look at this page:
http://docs.python.org/lib/node537.html

> I get tons of output to the BASH shell ...
>
> [0] Processing thread 0 - config file /etc/motion/motion.conf
> [0] Processing config file /etc/motion/motion.1.conf
> [0] Processing config file /etc/motion/motion.2.conf
> [1] Thread is from /etc/motion/motion.1.conf
> [2] Thread is from /etc/motion/motion.2.conf
> [1] Thread started
> [2] Thread started
> [1] File of type 2 saved to: /var/lib/motion/20080203/01/tmp/175253.jpg
> ...etc ...
>
> I just can't work out why this is happening & how to stop it ?. Any ideas ?
>
> Cheers
>
> Dave
>
>
>
>   



More information about the Tutor mailing list