def start(ctx, system=True):
"""
Start both Nginx and Gunicorn under Circus supervision (#TODO!).
"""
# os.execlp('circusd', '--daemon', '/etc/circus.ini')
#os.spawnlp(os.P_NOWAIT, 'nginx', '-p', '/var/www', '-c', '/etc/nginx/nginx.conf')
wsgi = os.environ.get('WSGI_APPLICATION', 'app')
if system:
ctx.run('nginx -p /var/www -c /etc/nginx/nginx.conf')
ctx.run('gunicorn -b unix:/tmp/webapp.sock %s --reload' % wsgi, pty=True)
else:
ctx.run('nginx -p /var/www -c /etc/nginx/nginx.conf')
sock = 'unix:/tmp/gunicorn.sock'
os.execlp('gunicorn', '-b', sock, wsgi, '--reload')
python类spawnlp()的实例源码
def run(program, *args):
"""Spawns a the given program as a subprocess and waits for its exit"""
# I for Invariant argument count, P for using PATH environmental variable
os.spawnlp(os.P_WAIT, program, program, *args)
def create_spawnl(original_name):
def new_spawnl(mode, path, *args):
"""
os.spawnl(mode, path, arg0, arg1, ...)
os.spawnlp(mode, file, arg0, arg1, ...)
"""
import os
args = patch_args(args)
send_process_created_message()
return getattr(os, original_name)(mode, path, *args)
return new_spawnl
def patch_new_process_functions_with_warning():
monkey_patch_os('execl', create_warn_multiproc)
monkey_patch_os('execle', create_warn_multiproc)
monkey_patch_os('execlp', create_warn_multiproc)
monkey_patch_os('execlpe', create_warn_multiproc)
monkey_patch_os('execv', create_warn_multiproc)
monkey_patch_os('execve', create_warn_multiproc)
monkey_patch_os('execvp', create_warn_multiproc)
monkey_patch_os('execvpe', create_warn_multiproc)
monkey_patch_os('spawnl', create_warn_multiproc)
monkey_patch_os('spawnle', create_warn_multiproc)
monkey_patch_os('spawnlp', create_warn_multiproc)
monkey_patch_os('spawnlpe', create_warn_multiproc)
monkey_patch_os('spawnv', create_warn_multiproc)
monkey_patch_os('spawnve', create_warn_multiproc)
monkey_patch_os('spawnvp', create_warn_multiproc)
monkey_patch_os('spawnvpe', create_warn_multiproc)
if sys.platform != 'win32':
monkey_patch_os('fork', create_warn_multiproc)
try:
import _posixsubprocess
monkey_patch_module(_posixsubprocess, 'fork_exec', create_warn_fork_exec)
except ImportError:
pass
else:
# Windows
try:
import _subprocess
except ImportError:
import _winapi as _subprocess
monkey_patch_module(_subprocess, 'CreateProcess', create_CreateProcessWarnMultiproc)
def tearDown(self):
"""
Un-load the launchd job and report any errors it encountered.
"""
os.spawnlp(os.P_WAIT, "launchctl",
"launchctl", "unload", self.job.path)
err = self.stderr.getContent()
if 'Traceback' in err:
self.fail(err)
def casalogger(logfile=''):
"""
Spawn a new casalogger using logfile as the filename.
You should only call this if the casalogger dies or you close it
and restart it again.
Note: if you changed the name of the log file using casalog.setlogfile
you will need to respawn casalogger with the new log filename. Eventually,
we will figure out how to signal the casalogger with the new name but not
for a while.
"""
if logfile == '':
if casa.has_key('files') and casa['files'].has_key('logfile') :
logfile = casa['files']['logfile']
else:
casa['files']['logfile'] = os.getcwd( ) + '/casa.log'
logfile = 'casa.log'
pid=9999
if (os.uname()[0]=='Darwin'):
if casa['helpers']['logger'] == 'console':
os.system("open -a console " + logfile)
else:
# XCode7 writes debug messages to stderr, which then end up in the
# Casa console. Hence the stderr is directed to devnull
#pid=os.spawnvp(os.P_NOWAIT,casa['helpers']['logger'],[casa['helpers']['logger'], logfile])
DEVNULL = open(os.devnull, 'w')
pid = Popen([casa['helpers']['logger'],logfile], stderr=DEVNULL).pid
#pid = Popen([casa['helpers']['logger'],logfile], stdin=PIPE, stdout=FNULL, stderr=STDOUT).pid
elif (os.uname()[0]=='Linux'):
pid=os.spawnlp(os.P_NOWAIT,casa['helpers']['logger'],casa['helpers']['logger'],logfile)
else:
print 'Unrecognized OS: No logger available'
if (pid!=9999): logpid.append(pid)
def patch_new_process_functions():
# os.execl(path, arg0, arg1, ...)
# os.execle(path, arg0, arg1, ..., env)
# os.execlp(file, arg0, arg1, ...)
# os.execlpe(file, arg0, arg1, ..., env)
# os.execv(path, args)
# os.execve(path, args, env)
# os.execvp(file, args)
# os.execvpe(file, args, env)
monkey_patch_os('execl', create_execl)
monkey_patch_os('execle', create_execl)
monkey_patch_os('execlp', create_execl)
monkey_patch_os('execlpe', create_execl)
monkey_patch_os('execv', create_execv)
monkey_patch_os('execve', create_execve)
monkey_patch_os('execvp', create_execv)
monkey_patch_os('execvpe', create_execve)
# os.spawnl(mode, path, ...)
# os.spawnle(mode, path, ..., env)
# os.spawnlp(mode, file, ...)
# os.spawnlpe(mode, file, ..., env)
# os.spawnv(mode, path, args)
# os.spawnve(mode, path, args, env)
# os.spawnvp(mode, file, args)
# os.spawnvpe(mode, file, args, env)
monkey_patch_os('spawnl', create_spawnl)
monkey_patch_os('spawnle', create_spawnl)
monkey_patch_os('spawnlp', create_spawnl)
monkey_patch_os('spawnlpe', create_spawnl)
monkey_patch_os('spawnv', create_spawnv)
monkey_patch_os('spawnve', create_spawnve)
monkey_patch_os('spawnvp', create_spawnv)
monkey_patch_os('spawnvpe', create_spawnve)
if sys.platform != 'win32':
monkey_patch_os('fork', create_fork)
try:
import _posixsubprocess
monkey_patch_module(_posixsubprocess, 'fork_exec', create_fork_exec)
except ImportError:
pass
else:
# Windows
try:
import _subprocess
except ImportError:
import _winapi as _subprocess
monkey_patch_module(_subprocess, 'CreateProcess', create_CreateProcess)