|  | #!/usr/bin/env python | 
|  | import os | 
|  | import sys | 
|  | import subprocess | 
|  |  | 
|  | # Detach from the controlling terminal and parent process by forking twice to daemonize ourselves, | 
|  | # then run the command passed as argv[1]. Send log data to argv[2]. | 
|  |  | 
|  | pid = os.fork() | 
|  | if (pid == 0): | 
|  | os.setsid() | 
|  | pid = os.fork() | 
|  | if (pid != 0): | 
|  | os._exit(0) | 
|  | else: | 
|  | sys.exit() | 
|  |  | 
|  |  | 
|  | si = file(os.devnull, 'r') | 
|  | so = file(sys.argv[2], 'w') | 
|  | se = so | 
|  |  | 
|  | # Replace those fds with our own | 
|  | os.dup2(si.fileno(), sys.stdin.fileno()) | 
|  | os.dup2(so.fileno(), sys.stdout.fileno()) | 
|  | os.dup2(se.fileno(), sys.stderr.fileno()) | 
|  |  | 
|  | ret = subprocess.call(sys.argv[1], shell=True) | 
|  |  | 
|  | os._exit(ret) | 
|  |  |