parent
							
								
									4558a6284d
								
							
						
					
					
						commit
						90306b2be0
					
				| @ -0,0 +1,144 @@ | |||||||
|  | #!/usr/bin/env python | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  | OSC-2-BAT | ||||||
|  | -------------------------- | ||||||
|  | v0.1.0 | ||||||
|  | -------------------------- | ||||||
|  | 
 | ||||||
|  | OSC server that receives commands on /script/* and runs batch files | ||||||
|  | 
 | ||||||
|  | -i [IP ADDRESS]     --ip [IP ADDRESS]       IP Address to listen on | ||||||
|  | -p [PORT]           --port [PORT]           Port to listen on | ||||||
|  | -s [FOLDER]         --scripts [SCRIPTS]     Folder containing batch script files | ||||||
|  | -l [LEVEL]          --log-level [LEVEL]     Log Level [CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET] | ||||||
|  | -nl                 --no-logging            Disable logging | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | """------------------------------------------------------------------------------------------- | ||||||
|  | -- IMPORTS | ||||||
|  | -------------------------------------------------------------------------------------------""" | ||||||
|  | 
 | ||||||
|  | # ARGUMENT PARSING | ||||||
|  | import argparse | ||||||
|  | 
 | ||||||
|  | # PYTHON OSC | ||||||
|  | from pythonosc.dispatcher import Dispatcher | ||||||
|  | from pythonosc.osc_server import BlockingOSCUDPServer | ||||||
|  | 
 | ||||||
|  | # SUBPROCESS | ||||||
|  | import os | ||||||
|  | import subprocess | ||||||
|  | from subprocess import Popen | ||||||
|  | 
 | ||||||
|  | # LOGGING | ||||||
|  | import logging | ||||||
|  | import datetime | ||||||
|  | 
 | ||||||
|  | """------------------------------------------------------------------------------------------- | ||||||
|  | -- ARGUMENT PARSING | ||||||
|  | -------------------------------------------------------------------------------------------""" | ||||||
|  | 
 | ||||||
|  | parser = argparse.ArgumentParser() | ||||||
|  | 
 | ||||||
|  | parser.add_argument("-i", "--ip", dest="ip",  default="127.0.0.1", help="IP Address to listen on") | ||||||
|  | parser.add_argument("-p", "--port", dest="port", default="1337", type=int, help="Port to listen on") | ||||||
|  | parser.add_argument("-s", "--scripts", dest="scripts", default=".", help="Folder containing batch script files") | ||||||
|  | parser.add_argument("-l", "--log-level", dest="loglevel", default='info', help="Log Level [CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET]") | ||||||
|  | parser.add_argument("-nl", "--no-logging", dest="logaction", action='store_false', help="Disable logging") | ||||||
|  | 
 | ||||||
|  | args = parser.parse_args() | ||||||
|  | 
 | ||||||
|  | server_ip = args.ip | ||||||
|  | server_port = args.port | ||||||
|  | scripts_path = args.scripts | ||||||
|  | logging_level = args.loglevel | ||||||
|  | 
 | ||||||
|  | batch_files = [] | ||||||
|  | 
 | ||||||
|  | """------------------------------------------------------------------------------------------- | ||||||
|  | -- LOGGING | ||||||
|  | -------------------------------------------------------------------------------------------""" | ||||||
|  | 
 | ||||||
|  | # LOGGING FILE LOCATION | ||||||
|  | log_filename = "osc-2-script." + datetime.datetime.now().strftime('%m-%d-%Y') + ".log" | ||||||
|  | 
 | ||||||
|  | # SET LEVEL | ||||||
|  | return_loglevel_error = False | ||||||
|  | if logging_level.upper() not in list(logging._nameToLevel.keys()): | ||||||
|  |     return_loglevel_error = True | ||||||
|  |     logging_level = 'WARNING' | ||||||
|  | 
 | ||||||
|  | if args.logaction: | ||||||
|  |     logging.basicConfig(filename=log_filename, level=logging_level.upper(), format='%(asctime)s - %(levelname)s - %(message)s', datefmt='%d-%b-%y %H:%M:%S') | ||||||
|  | 
 | ||||||
|  | if return_loglevel_error: | ||||||
|  |     print(f"{args.loglevel.upper()} not a valid logging level - defaulting to WARNING") | ||||||
|  |     if args.logaction: | ||||||
|  |         logging.warning(f"{args.loglevel.upper()} not a valid logging level - defaulting to WARNING") | ||||||
|  | 
 | ||||||
|  |     print(f"Logging level set to {logging_level}") | ||||||
|  |     if args.logaction: | ||||||
|  |         logging.info(f"Logging level set to {logging_level}") | ||||||
|  |     print(f"Logging to file: {log_filename}") | ||||||
|  |     if args.logaction: | ||||||
|  |         logging.info(f"Logging to file: {log_filename}") | ||||||
|  | 
 | ||||||
|  | """------------------------------------------------------------------------------------------- | ||||||
|  | -- SERVER - HANDLER FUNCTIONS | ||||||
|  | -------------------------------------------------------------------------------------------""" | ||||||
|  | 
 | ||||||
|  | # DEFAULT HANDLER | ||||||
|  | 
 | ||||||
|  | def default_handler(address, *args): | ||||||
|  |     print(f"DEFAULT - {address}: {args}") | ||||||
|  | 
 | ||||||
|  | # SCRIPT HANDLER | ||||||
|  | 
 | ||||||
|  | def script_handler(address, *args): | ||||||
|  | 
 | ||||||
|  |     if args.logaction: | ||||||
|  |         logging.debug("Running Script Handler") | ||||||
|  | 
 | ||||||
|  |     script_to_run = address.split("/") | ||||||
|  | 
 | ||||||
|  |     script_name = script_to_run[-1] | ||||||
|  |     script_location = script_to_run[2:-1] | ||||||
|  | 
 | ||||||
|  |     print(f"SCRIPT LOCATION: {script_location} - SCRIPT NAME {script_name}") | ||||||
|  |     if args.logaction: | ||||||
|  |         logging.debug(f"SCRIPT LOCATION: {script_location} - SCRIPT NAME: {script_name}") | ||||||
|  | 
 | ||||||
|  |     file_path = os.path.join(scripts_path, *script_location, script_name) | ||||||
|  | 
 | ||||||
|  |     if os.path.isfile(file_path): | ||||||
|  |         print(f"RUNNING SCRIPT: {file_path}") | ||||||
|  |         if args.logaction: | ||||||
|  |             logging.info(f"RUNNING SCRIPT: {file_path}") | ||||||
|  |         Popen(file_path,creationflags=subprocess.CREATE_NEW_CONSOLE) | ||||||
|  |     else: | ||||||
|  |         print(f"FILE NOT FOUND: {file_path}") | ||||||
|  |         if args.logaction: | ||||||
|  |             logging.error(f"FILE NOT FOUND: {file_path}") | ||||||
|  | 
 | ||||||
|  | """------------------------------------------------------------------------------------------- | ||||||
|  | -- SERVER | ||||||
|  | -------------------------------------------------------------------------------------------""" | ||||||
|  | 
 | ||||||
|  | # DISPATCHER | ||||||
|  | dispatcher = Dispatcher() | ||||||
|  | 
 | ||||||
|  | dispatcher.map("/script/*", script_handler) | ||||||
|  | dispatcher.set_default_handler(default_handler) | ||||||
|  | 
 | ||||||
|  | # SERVER START | ||||||
|  | if __name__ == '__main__': | ||||||
|  | 
 | ||||||
|  |     print(f"Starting server on interface {server_ip} port {server_port}") | ||||||
|  |     if args.logaction: | ||||||
|  |         logging.info(f"Starting server on interface {server_ip} port {server_port}") | ||||||
|  | 
 | ||||||
|  |     server = BlockingOSCUDPServer((server_ip, server_port), dispatcher) | ||||||
|  |     server.serve_forever() | ||||||
| @ -0,0 +1,10 @@ | |||||||
|  | 
 | ||||||
|  | import argparse | ||||||
|  | parser = argparse.ArgumentParser() | ||||||
|  | 
 | ||||||
|  | parser.add_argument("-ip", "--osc-ip", dest="ip",  default="127.0.0.1", help="IP To Listen On") | ||||||
|  | parser.add_argument("-p", "--port", dest="port", default="1337", help="Port to Listen On") | ||||||
|  | 
 | ||||||
|  | args = parser.parse_args() | ||||||
|  | 
 | ||||||
|  | print(f"IP: {args.ip} - PORT: {args.port}") | ||||||
					Loading…
					
					
				
		Reference in new issue