Updated code to v0.1.0

main
andrew.vanderbye 9 months ago
parent 4558a6284d
commit 90306b2be0
  1. 0
      README.md
  2. 144
      osc-2-bat.py
  3. 8
      server.py
  4. 10
      snippet.py

@ -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()

@ -4,6 +4,14 @@ from pythonosc.osc_server import BlockingOSCUDPServer
import subprocess import subprocess
from subprocess import Popen from subprocess import Popen
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-ip", "--osc-ip", help="OSC Device IP Address")
parser.add_argument("-p", "--port", help="OSC Device Port")
args = parser.parse_args()
def default_handler(address, *args): def default_handler(address, *args):
print(f"DEFAULT {address}: {args}") print(f"DEFAULT {address}: {args}")

@ -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…
Cancel
Save