#!/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)

