load arguments and debug logic
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -149,3 +149,5 @@ cython_debug/
|
||||
# Local History for Visual Studio Code
|
||||
.history/
|
||||
|
||||
|
||||
config.yaml
|
||||
|
||||
16
.vscode/launch.json
vendored
Normal file
16
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Python: Current File",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "onlyone",
|
||||
"console": "integratedTerminal",
|
||||
"args": ["--configFile","config.yaml"]
|
||||
}
|
||||
]
|
||||
}
|
||||
7
config.example.yaml
Normal file
7
config.example.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
defaultProcess: a
|
||||
processes:
|
||||
- key: a
|
||||
cmd: aaa
|
||||
- key: b
|
||||
cmd: aaa
|
||||
@@ -5,87 +5,96 @@ from typing import List
|
||||
|
||||
|
||||
|
||||
def b():
|
||||
return 3+3
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
def isrunning(process:str):
|
||||
def isrunning(cmd:str):
|
||||
for proc in psutil.process_iter():
|
||||
if process.split(" ")[0] == proc.name().split(" ")[0]:
|
||||
if cmd == " ".join(proc.cmdline()):
|
||||
return True
|
||||
return False
|
||||
|
||||
def startprocess(process:str):
|
||||
def startprocess(cmd):
|
||||
try:
|
||||
#raise Exception("aaa")
|
||||
os.popen(process)
|
||||
log.info("[onlyone][startprocess] -> processed started : " + process)
|
||||
os.popen(cmd)
|
||||
log.info("[onlyone][startprocess] -> processed started : " + cmd)
|
||||
except OSError as e:
|
||||
log.error("eror")
|
||||
except:
|
||||
log.error("eror")
|
||||
|
||||
|
||||
def __killprocesses(killprocesses:List, processesList: List):
|
||||
def __killprocesses(killcmds:List, sysprocesses: List):
|
||||
if killprocesses == None :
|
||||
return False
|
||||
for proc in processesList:
|
||||
if any(element.split(" ")[0] == proc.name().split(" ")[0] for element in killprocesses):
|
||||
for proc in sysprocesses:
|
||||
if any(" ".join(proc.cmdline()) == x for x in killcmds):
|
||||
proc.kill()
|
||||
log.info("[onlyone][__killprocesses] -> processed kiled : " + proc.name + "(" + proc.id + ")")
|
||||
return False
|
||||
|
||||
|
||||
def killprocesses(killprocesses:List):
|
||||
return __killprocesses(killprocesses, psutil.process_iter())
|
||||
def killprocesses(killcmds:List):
|
||||
return __killprocesses(killcmds, psutil.process_iter())
|
||||
|
||||
|
||||
def __forceoneprocessinstance(process:str, processes:List):
|
||||
def __forceoneprocessinstance(cmd:str, processes:List):
|
||||
found = False
|
||||
for proc in processes:
|
||||
if proc.name().split(" ")[0] == process.split(" ")[0]:
|
||||
if " ".join(proc.cmdline()) == cmd:
|
||||
if found:
|
||||
proc.kill()
|
||||
log.info("[onlyone][__forceoneprocessinstance] -> processed kiled : " + proc.name + "(" + proc.id + ")")
|
||||
else :
|
||||
found = True
|
||||
if not found:
|
||||
startprocess(process)
|
||||
startprocess(cmd)
|
||||
|
||||
def forceoneprocessinstance(processname:str):
|
||||
return __forceoneprocessinstance(processname, psutil.process_iter())
|
||||
def forceoneprocessinstance(cmd:str):
|
||||
return __forceoneprocessinstance(cmd, psutil.process_iter())
|
||||
|
||||
def onlyone(process:str, killprocesses:list):
|
||||
def onlyone(cmd:str, killcmds:list):
|
||||
processes = psutil.process_iter()
|
||||
__killprocesses(killprocesses, processes)
|
||||
__forceoneprocessinstance(process, processes)
|
||||
__killprocesses(killcmds, processes)
|
||||
__forceoneprocessinstance(cmd, processes)
|
||||
|
||||
def Manager():
|
||||
class Manager:
|
||||
def __init__(self):
|
||||
self.processes=[]
|
||||
self._current=None
|
||||
self.__processes=[]
|
||||
self.__current=None
|
||||
|
||||
def addprocess(self, key, processname, initParams):
|
||||
self.processes.append({
|
||||
key:key,
|
||||
processname:processname,
|
||||
initParams:initParams
|
||||
})
|
||||
def load(self, dict:dict):
|
||||
if(dict == None):return
|
||||
if("processes" in dict):
|
||||
for p in dict["processes"]:
|
||||
if "key" in p and "cmd" in p:
|
||||
self.addprocess(p["key"], p["cmd"])
|
||||
if("defaultProcess" in dict):
|
||||
self.current(dict["defaultProcess"])
|
||||
|
||||
|
||||
def addprocess(self, key, cmd):
|
||||
self.__processes.append({"key": key, "cmd":cmd})
|
||||
|
||||
def current(self):
|
||||
return None if self == None else self._current.key
|
||||
if self.__current == None:
|
||||
return None
|
||||
else:
|
||||
return self.__current["key"]
|
||||
|
||||
def current(self, key):
|
||||
item = any(element in key for element in self.processes)
|
||||
|
||||
item = None
|
||||
if key!=None:
|
||||
for x in self.__processes:
|
||||
if x["key"] == key:
|
||||
item =x
|
||||
if item == None:
|
||||
return None
|
||||
self._current=item
|
||||
others = []
|
||||
for item in self.processes:
|
||||
if item.key!=key:
|
||||
others.append(item.processname)
|
||||
onlyone(item.processname, item.initParams, [element.processname for element in others])
|
||||
killprocesses([x["cmd"] for x in self.__processes])
|
||||
self._current = None
|
||||
return
|
||||
|
||||
onlyone(item["cmd"], [x for x in self.__processes if x["key"]!=item["key"]])
|
||||
self._current = item["key"]
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -2,37 +2,34 @@ import logging
|
||||
import argparse
|
||||
from types import new_class
|
||||
from typing import List
|
||||
from __init__ import *
|
||||
import sys
|
||||
import onlyone
|
||||
import yaml
|
||||
import os
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
logging.basicConfig(level="DEBUG")
|
||||
log = logging.getLogger(__name__)
|
||||
parser = argparse.ArgumentParser(description='onlyone')
|
||||
parser.add_argument('--init', type=str, required=False, help='init processes')
|
||||
parser.add_argument('--kill', type=List, required=False, help='kill processes')
|
||||
parser.add_argument('--configfile', type=str, required=False, help='configfile')
|
||||
parser.add_argument('--mode', type=str, required=False, help='configfile')
|
||||
parser.add_argument('--configFile', type=str, required=False, help='configfile')
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
|
||||
sys.stdout.write("arguments - " + str(sys.argv))
|
||||
log.info("Current Path:" + os.getcwd())
|
||||
if args.configfile:
|
||||
manager = Manager()
|
||||
#manager.refreshrate(1000)
|
||||
manager.addprocess("x", "aaaaa", None)
|
||||
manager.current("x")
|
||||
#manager.oncurrent_changed(__oncurrent_changed)
|
||||
console.writeline("write !quit and enter to exit")
|
||||
else:
|
||||
if args.init:
|
||||
log.debug("invoking onlyone.onlyone")
|
||||
onlyone(args.init, args.kill)
|
||||
quit()
|
||||
if args.kill:
|
||||
log.debug("invoking onlyone.killprocesses")
|
||||
killprocesses(args.kill)
|
||||
quit()
|
||||
log.debug("invoked without arguments")
|
||||
manager = onlyone.Manager()
|
||||
if os.path.isfile(args.configfile):
|
||||
log.info("trying to read file : " + args.configfile)
|
||||
configTxt = open(args.configfile, "r").read()
|
||||
log.info("config file content : " + configTxt)
|
||||
log.info("trying read yaml")
|
||||
configDict = yaml.safe_load(configTxt)
|
||||
manager.load(configDict)
|
||||
|
||||
else:
|
||||
log.error("Current Path:" + os.getcwd())
|
||||
log.error("File dont exists:" + args.configfile)
|
||||
|
||||
def __oncurrent_changed(self, sender):
|
||||
t=""
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
refresrate: 3000
|
||||
default:
|
||||
fifo:
|
||||
name: "aaaaaa"
|
||||
mqtt:
|
||||
broker: "aaaaaaaaaa"
|
||||
clientid: "aaaaaaa"
|
||||
topic: home/pi/onlyone
|
||||
username:
|
||||
password:
|
||||
rest:
|
||||
username: aaaa
|
||||
password: aaa
|
||||
port: 67777
|
||||
processes: _
|
||||
key: blue
|
||||
process: smb
|
||||
params: _
|
||||
teste
|
||||
teste
|
||||
aaa
|
||||
key: blue
|
||||
process: smb
|
||||
findexp: aaaaaa
|
||||
params: _
|
||||
teste
|
||||
teste
|
||||
aaa
|
||||
key: blue
|
||||
process: smb
|
||||
params: _
|
||||
teste
|
||||
teste
|
||||
aaa
|
||||
Reference in New Issue
Block a user