| Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 1 | #!/usr/bin/env python | 
|  | 2 | import os | 
|  | 3 | import sys | 
|  | 4 | import subprocess | 
|  | 5 |  | 
|  | 6 | # Detach from the controlling terminal and parent process by forking twice to daemonize ourselves, | 
|  | 7 | # then run the command passed as argv[1]. Send log data to argv[2]. | 
|  | 8 |  | 
|  | 9 | pid = os.fork() | 
|  | 10 | if (pid == 0): | 
|  | 11 | os.setsid() | 
|  | 12 | pid = os.fork() | 
|  | 13 | if (pid != 0): | 
|  | 14 | os._exit(0) | 
|  | 15 | else: | 
|  | 16 | sys.exit() | 
|  | 17 |  | 
|  | 18 |  | 
|  | 19 | si = file(os.devnull, 'r') | 
|  | 20 | so = file(sys.argv[2], 'w') | 
|  | 21 | se = so | 
|  | 22 |  | 
|  | 23 | # Replace those fds with our own | 
|  | 24 | os.dup2(si.fileno(), sys.stdin.fileno()) | 
|  | 25 | os.dup2(so.fileno(), sys.stdout.fileno()) | 
|  | 26 | os.dup2(se.fileno(), sys.stderr.fileno()) | 
|  | 27 |  | 
|  | 28 | ret = subprocess.call(sys.argv[1], shell=True) | 
|  | 29 |  | 
|  | 30 | os._exit(ret) | 
|  | 31 |  |