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