def main(): usage = "%prog [options] <config file>" opts = optparse.OptionParser(usage) opts.add_option("-i", "--debuginput", dest="debuginput", help="read commands from file instead of from tty port") opts.add_option("-I", "--input-tty", dest="inputtty", default='/tmp/printer', help="input tty name (default is /tmp/printer)") opts.add_option("-l", "--logfile", dest="logfile", help="write log to file instead of stderr") opts.add_option("-v", action="store_true", dest="verbose", help="enable debug messages") opts.add_option("-o", "--debugoutput", dest="debugoutput", help="write output to file instead of to serial port") opts.add_option("-d", "--dictionary", dest="dictionary", type="string", action="callback", callback=arg_dictionary, help="file to read for mcu protocol dictionary") options, args = opts.parse_args() if len(args) != 1: opts.error("Incorrect number of arguments") start_args = {'config_file': args[0], 'start_reason': 'startup'} input_fd = bglogger = None debuglevel = logging.INFO if options.verbose: debuglevel = logging.DEBUG if options.debuginput: start_args['debuginput'] = options.debuginput debuginput = open(options.debuginput, 'rb') input_fd = debuginput.fileno() else: input_fd = util.create_pty(options.inputtty) if options.debugoutput: start_args['debugoutput'] = options.debugoutput start_args.update(options.dictionary) if options.logfile: bglogger = queuelogger.setup_bg_logging(options.logfile, debuglevel) else: logging.basicConfig(level=debuglevel) logging.info("Starting Klippy...") start_args['software_version'] = util.get_git_version() if bglogger is not None: versions = "\n".join([ "Args: %s" % (sys.argv,), "Git version: %s" % (repr(start_args['software_version']),), "CPU: %s" % (util.get_cpu_info(),), "Python: %s" % (repr(sys.version),)]) logging.info(versions) # Start Printer() class while 1: if bglogger is not None: bglogger.clear_rollover_info() bglogger.set_rollover_info('versions', versions) printer = Printer(input_fd, bglogger, start_args) res = printer.run() if res in ['exit', 'error_exit']: break time.sleep(1.) logging.info("Restarting printer") start_args['start_reason'] = res if bglogger is not None: bglogger.stop() if res == 'error_exit': sys.exit(-1)
def main(): usage = "%prog [options] <config file>" opts = optparse.OptionParser(usage) opts.add_option("-i", "--debuginput", dest="debuginput", help="read commands from file instead of from tty port") opts.add_option("-I", "--input-tty", dest="inputtty", default='/tmp/printer', help="input tty name (default is /tmp/printer)") opts.add_option("-a", "--api-server", dest="apiserver", help="api server unix domain socket filename") opts.add_option("-l", "--logfile", dest="logfile", help="write log to file instead of stderr") opts.add_option("-v", action="store_true", dest="verbose", help="enable debug messages") opts.add_option("-o", "--debugoutput", dest="debugoutput", help="write output to file instead of to serial port") opts.add_option("-d", "--dictionary", dest="dictionary", type="string", action="callback", callback=arg_dictionary, help="file to read for mcu protocol dictionary") opts.add_option("--import-test", action="store_true", help="perform an import module test") options, args = opts.parse_args() if options.import_test: import_test() if len(args) != 1: opts.error("Incorrect number of arguments") start_args = {'config_file': args[0], 'apiserver': options.apiserver, 'start_reason': 'startup'} debuglevel = logging.INFO if options.verbose: debuglevel = logging.DEBUG if options.debuginput: start_args['debuginput'] = options.debuginput debuginput = open(options.debuginput, 'rb') start_args['gcode_fd'] = debuginput.fileno() else: start_args['gcode_fd'] = util.create_pty(options.inputtty) if options.debugoutput: start_args['debugoutput'] = options.debugoutput start_args.update(options.dictionary) bglogger = None if options.logfile: start_args['log_file'] = options.logfile bglogger = queuelogger.setup_bg_logging(options.logfile, debuglevel) else: logging.getLogger().setLevel(debuglevel) logging.info("Starting Klippy...") start_args['software_version'] = util.get_git_version() start_args['cpu_info'] = util.get_cpu_info() if bglogger is not None: versions = "\n".join([ "Args: %s" % (sys.argv,), "Git version: %s" % (repr(start_args['software_version']),), "CPU: %s" % (start_args['cpu_info'],), "Python: %s" % (repr(sys.version),)]) logging.info(versions) elif not options.debugoutput: logging.warning("No log file specified!" " Severe timing issues may result!") gc.disable() # Start Printer() class while 1: if bglogger is not None: bglogger.clear_rollover_info() bglogger.set_rollover_info('versions', versions) gc.collect() main_reactor = reactor.Reactor(gc_checking=True) printer = Printer(main_reactor, bglogger, start_args) res = printer.run() if res in ['exit', 'error_exit']: break time.sleep(1.) main_reactor.finalize() main_reactor = printer = None logging.info("Restarting printer") start_args['start_reason'] = res if bglogger is not None: bglogger.stop() if res == 'error_exit': sys.exit(-1)