''' Simple script to allow us to run paster more easily (but probably in an unintended way) ''' import subprocess import argparse import os import sys import signal #change this to be whatever your project will be called, import my_paster_package def main(): parser = argparse.ArgumentParser(description='Run as --dev or --prod.') group = parser.add_mutually_exclusive_group() group.add_argument('--dev', action="store_true", default=False) group.add_argument('--prod', action="store_true", default=False) args = parser.parse_args() #make sure we are running the paster out of the venv by finding the bin directory that this script is being #run out of bin_dir = os.path.dirname(sys.executable) config_file_dir = my_paster_package.__path__[0] if args.dev: p = subprocess.Popen("./paster serve %s/development.ini --reload" % (config_file_dir + "/.."), shell=True, cwd=bin_dir) elif args.prod: paster_pid_file = bin_dir+"/paster.pid" p = subprocess.Popen("./paster serve %s/production.ini --pid-file=%s" % (config_file_dir, paster_pid_file), shell=True, cwd=bin_dir) #attach a signal handler so we can kill off the subprocesses when supervisor kills this script #otherwise the kill signal doens't propegate to all the paster processes def signal_handler(signal, frame): if os.path.exists(paster_pid_file): paster_pid = open(paster_pid_file, "r").read() os.system("kill -2 %s" % (paster_pid)) else: print "Warning: Could not find paster pid file, paster might not have properly terminated" signal.signal(signal.SIGTERM, signal_handler) else: raise Exception("Please choose either --dev or --prod") sts = os.waitpid(p.pid, 0)[1] #return the code in case of a problem sys.exit(sts) if __name__ == '__main__': main()