#!/usr/bin/env python import sys import os import socket # fix symbolic link #sys.path.insert(0,os.path.dirname(os.path.abspath(sys.argv[0]))) try: from optparse import OptionParser except ImportError: from BitQueue.optparse import OptionParser from BitQueue import version parser = OptionParser(usage='btqueue.py [-r|--root_path path] scheduler|crawler|remote|query|add [args...]', version=version) parser.add_option("-r","--root",dest="root_path",default=None, help="specify root path") parser.add_option("-d","--debug_level",dest="debug_level",default=1, type='int', help="specify debug level") parser.add_option("-t","--test_crawler",dest="test_crawler",default=0, action='store_true', help="turn on crawler test mode") def usage(): print 'btqueue.py [scheduler|crawler|daemon|remote|query|add] [args...]' sys.exit() if __name__ == '__main__': (options,args) = parser.parse_args() if len(args) == 0: parser.error('incorrect number of arguments') command = args[0] if sys.platform == 'win32' or not os.environ.get('HOME'): root_path = os.path.dirname(os.path.abspath(sys.argv[0])) else: root_path = os.path.join(os.environ.get('HOME'),'.btqueue') # if len(sys.argv) == 3: # root_path = sys.argv[2] root_path = options.root_path or root_path from BitQueue import policy pol = policy.Policy(root_path) pol.set_default() if options.debug_level >= 0: pol.update('debug_level',options.debug_level) if command == 'scheduler': from BitQueue.manager import Console app = Console() try: app.mainloop() except SystemExit: pass except Exception,why: print why elif command == 'daemon': from BitQueue.manager import Daemon app = Daemon() try: app.daemonize() except SystemExit: pass except Exception,why: print why elif command == 'remote': from BitQueue.manager import XMLRPCConsole app = XMLRPCConsole() try: app.mainloop() except SystemExit: pass except Exception,why: print why elif command == 'crawler': from BitCrawler.crawler import Crawler from BitQueue import timeoutsocket timeoutsocket.setDefaultSocketTimeout(None) app = Crawler(options.test_crawler) app.process() else: from BitQueue.manager import XMLRPCConsole from BitQueue.xmlrpc import CommandResponse app = XMLRPCConsole() if sys.platform == 'win32' and command == 'add': from BitQueue import timeoutsocket timeoutsocket.setDefaultSocketTimeout(2) if command == 'query': command = 'list' elif command == 'add': command = 'add_metadata' line = ' '.join([command]+['"%s"' % a for a in args[1:]]) timeout = 0 try: res = app.onecmd(line) except socket.error,why: res = CommandResponse(error=why[1]) timeout = 1 from BitQueue import timeoutsocket timeoutsocket.setDefaultSocketTimeout(None) if sys.platform == 'win32' and command=='add' and \ res and res.geterror(): if timeout: from BitQueue.manager import Console app = Console() app.do_add(' '.join(args[1:])) app.mainloop() else: print res.geterror() raw_input() elif res and res.geterror(): print res.geterror()