implementation of logging through fprint

uiextras
Ibrahim Marou 2 years ago
parent 12f93c04d2
commit fa1f94ad07

@ -59,13 +59,13 @@ if linux:
#fprint(hostname) #fprint(hostname)
def netstat_done(res): def netstat_done(res):
fprint("netstat done, processing") fprint("netstat done, processing", settings)
procdata_res = pool.apply_async(netstat.process, (res,), callback=process_done) procdata_res = pool.apply_async(netstat.process, (res,), callback=process_done)
#netstat.process(res) #netstat.process(res)
def process_done(res): def process_done(res):
if settings["running"] == True: if settings["running"] == True:
fprint("uploading to sftp...") fprint("uploading to sftp...", settings)
#ssh.sftp_send_data(res, config, datafile) #ssh.sftp_send_data(res, config, datafile)
procdata_res = pool.apply_async(ssh.sftp_send_data, (config, datafile, 'send'), callback=upload_done) procdata_res = pool.apply_async(ssh.sftp_send_data, (config, datafile, 'send'), callback=upload_done)
@ -74,16 +74,16 @@ def upload_done(res):
def login_done(res): def login_done(res):
if not res: if not res:
fprint("Login failure") fprint("Login failure", settings)
settings["message"] = "Login failure" settings["message"] = "Login failure"
else: else:
fprint("Login result in main: " + str(res)) fprint("Login result in main: " + str(res), settings)
settings["loggedin"] = res settings["loggedin"] = res
settings["continueui"] = True settings["continueui"] = True
def blockdata_done(res): def blockdata_done(res):
global settings global settings
fprint("FINISHED downloading block data") fprint("FINISHED downloading block data", settings)
tmpkill = settings["kill"] tmpkill = settings["kill"]
settings["kill"] = False settings["kill"] = False
#block_res = pool.apply_async(block.block_conn, (config, datafile, res, settings)) #block_res = pool.apply_async(block.block_conn, (config, datafile, res, settings))
@ -91,29 +91,29 @@ def blockdata_done(res):
tmplist = settings["badapps"] tmplist = settings["badapps"]
for x in block_pids: for x in block_pids:
fprint(x) fprint(x, settings)
if not x in tmplist: if not x in tmplist:
tmplist.append(x) tmplist.append(x)
settings["badapps"] = tmplist settings["badapps"] = tmplist
fprint(settings["badapps"]) fprint(settings["badapps"], settings)
tmplist = settings["badips"] tmplist = settings["badips"]
for x in block_ips: for x in block_ips:
fprint(x) fprint(x, settings)
if not x in tmplist: if not x in tmplist:
tmplist.append(x) tmplist.append(x)
settings["badips"] = tmplist settings["badips"] = tmplist
fprint(settings["badips"]) fprint(settings["badips"], settings)
settings["kill"] = tmpkill settings["kill"] = tmpkill
tmplist = settings["badlines"] tmplist = settings["badlines"]
for x in block_data: for x in block_data:
fprint(x) fprint(x, settings)
if not x in tmplist: if not x in tmplist:
tmplist.append(x) tmplist.append(x)
settings["badlines"] = tmplist settings["badlines"] = tmplist
fprint(settings["badlines"]) fprint(settings["badlines"], settings)
settings["newdata"] = True settings["newdata"] = True
@ -121,7 +121,7 @@ def killall():
kids = active_children() kids = active_children()
for kid in kids: for kid in kids:
kid.kill() kid.kill()
fprint("Every child has been killed") fprint("Every child has been killed", settings)
os.kill(os.getpid(), 9) # dirty kill of self os.kill(os.getpid(), 9) # dirty kill of self
@ -145,7 +145,7 @@ def mainloop(pool):
if netdata_res is None or netdata_res.ready(): if netdata_res is None or netdata_res.ready():
#rawdata = netdata_res.get() #rawdata = netdata_res.get()
#procdata_res = pool.apply_async(process_netstat, (rawdata)) #procdata_res = pool.apply_async(process_netstat, (rawdata))
fprint("netstat starting") fprint("netstat starting", settings)
netdata_res = pool.apply_async(netstat.start, callback=netstat_done) netdata_res = pool.apply_async(netstat.start, callback=netstat_done)
#fprint(netdata_res.successful()) #fprint(netdata_res.successful())
@ -204,7 +204,7 @@ def mainloop(pool):
badproto = line[1] badproto = line[1]
badip = line[4] badip = line[4]
badport = line[5] badport = line[5]
fprint("Firewalling " + badip + ":" + str(badport)) fprint("Firewalling " + badip + ":" + str(badport), settings)
cmd = 'New-NetFirewallRule -DisplayName "IPPigeon Security Rule ' + badip + ':' + str(badport) + '" -Group "IPPigeon" -Direction Outbound -LocalPort Any -Protocol ' + badproto + ' -Action Block -RemoteAddress ' + badip + ' -RemotePort ' + str(badport) cmd = 'New-NetFirewallRule -DisplayName "IPPigeon Security Rule ' + badip + ':' + str(badport) + '" -Group "IPPigeon" -Direction Outbound -LocalPort Any -Protocol ' + badproto + ' -Action Block -RemoteAddress ' + badip + ' -RemotePort ' + str(badport)
run_cmd(cmd) run_cmd(cmd)
@ -216,8 +216,9 @@ def mainloop(pool):
with open(find_data_file('config.yml'), 'w') as filewrite: with open(find_data_file('config.yml'), 'w') as filewrite:
#global config #global config
yaml.dump(config, filewrite) yaml.dump(config, filewrite)
fprint("Config saved!") fprint("Config saved!", settings)
sleep(interval / (interval * config["core"]["clockspeed"])) sleep(interval / (interval * config["core"]["clockspeed"]))
counter += 1 counter += 1
if counter == interval * config["core"]["clockspeed"]: if counter == interval * config["core"]["clockspeed"]:
@ -273,6 +274,7 @@ if __name__ == '__main__':
settings["fwll"] = 0 settings["fwll"] = 0
settings["running"] = config["core"]["autostart"] settings["running"] = config["core"]["autostart"]
settings["newdata"] = False settings["newdata"] = False
settings["logMsg"] = list()
killme = manager.Value('d', 0) killme = manager.Value('d', 0)
#killme = False #killme = False
# launch background UI app as process # launch background UI app as process

@ -4,6 +4,7 @@ from util import fprint
from util import run_cmd from util import run_cmd
from util import win32 from util import win32
from util import linux from util import linux
from ippigeon import settings
import util import util
import time import time
import csv import csv
@ -12,12 +13,12 @@ import csv
def process(data): def process(data):
setup_child() setup_child()
fprint("netstat processing") fprint("netstat processing", settings)
if win32: if win32:
#output = data.stdout #output = data.stdout
#print(output) #print(output)
output = data.stdout.decode().split('\r\n') # split stdout into lines output = data.stdout.decode().split('\r\n') # split stdout into lines
#print(output) print("data", data)
if output[0].find("The requested operation requires elevation.") >= 0: if output[0].find("The requested operation requires elevation.") >= 0:
#print("test3") #print("test3")
raise PermissionError("Unable to acquire netstat data without admin!") raise PermissionError("Unable to acquire netstat data without admin!")
@ -68,13 +69,13 @@ def process(data):
with open(find_data_file(util.datafile), "w", newline="") as f: with open(find_data_file(util.datafile), "w", newline="") as f:
writer = csv.writer(f) writer = csv.writer(f)
writer.writerows(output2) writer.writerows(output2)
fprint("done creating csv") fprint("done creating csv", settings)
if linux: if linux:
output = data.stdout.decode().split('\n') # split stdout into lines output = data.stdout.decode().split('\n') # split stdout into lines
output = [i for i in output if i] output = [i for i in output if i]
if output[0].find("Not all processes could be identified") >= 0: if output[0].find("Not all processes could be identified") >= 0:
fprint("Not enough permissions") fprint("Not enough permissions", settings)
raise PermissionError("Unable to acquire netstat data without admin!") raise PermissionError("Unable to acquire netstat data without admin!")
output2 = list() output2 = list()
output2.append([util.sysid, util.userid, util.sysdom, util.time()]) # add metadata output2.append([util.sysid, util.userid, util.sysdom, util.time()]) # add metadata
@ -106,20 +107,20 @@ def process(data):
with open(find_data_file(util.datafile), "w", newline="") as f: with open(find_data_file(util.datafile), "w", newline="") as f:
writer = csv.writer(f) writer = csv.writer(f)
writer.writerows(output2) writer.writerows(output2)
fprint("done creating csv") fprint("done creating csv", settings)
def start(): def start():
setup_child() setup_child()
fprint("netstat started") fprint("netstat started", settings)
if win32: if win32:
data = run_cmd("netstat -n -o -b") data = run_cmd("netstat -n -o -b")
fprint("data acquired") fprint("data acquired", settings)
return data return data
if linux: if linux:
data = run_cmd("netstat -atunpw") data = run_cmd("netstat -atunpw")
fprint("data acquired") fprint("data acquired", settings)
return data return data

@ -1,4 +1,6 @@
import glob import glob
import logging
import sys
import wx import wx
import wx.lib.buttons as buttons import wx.lib.buttons as buttons
import numpy as np import numpy as np
@ -47,7 +49,7 @@ class OtherFrame(wx.Frame):
self.Show() self.Show()
def on_edit(self, event): def on_edit(self, event):
fprint('in on_edit') fprint('in on_edit', settings)
def on_window(self, event): def on_window(self, event):
return return
@ -173,11 +175,20 @@ class ServerPanel(wx.Panel):
start_button.SetBackgroundColour((205, 215, 206)) start_button.SetBackgroundColour((205, 215, 206))
start_button.Bind(wx.EVT_BUTTON, self.on_start) start_button.Bind(wx.EVT_BUTTON, self.on_start)
#start_button.Bind(wx.EVT_ENTER_WINDOW, self.on_start) #start_button.Bind(wx.EVT_ENTER_WINDOW, self.on_start)
stop_button = wx.Button(self, label='Stop IPPigeon') stop_button = wx.Button(self, label='Stop IPPigeon')
stop_button.SetBackgroundColour('#F08080') stop_button.SetBackgroundColour('#F08080')
secondary_frame_button = wx.Button(self, label='Settings') secondary_frame_button = wx.Button(self, label='Settings')
secondary_frame_button.Bind(wx.EVT_BUTTON, self.on_window) secondary_frame_button.Bind(wx.EVT_BUTTON, self.on_window)
log_button = wx.Button(self, label='Logs')
log_button.Bind(wx.EVT_BUTTON, self.on_log)
#self.log_window = wx.LogWindow(self, 'Log Window', True)
#show_log_button = wx.Button(self, wx.NewId(), 'Show Log')
#show_log_button.Bind(wx.EVT_BUTTON, self._show_log)
# wx.BORDER(stop_button, wx.BORDER_NONE) # wx.BORDER(stop_button, wx.BORDER_NONE)
stop_button.Bind(wx.EVT_BUTTON, self.on_stop) stop_button.Bind(wx.EVT_BUTTON, self.on_stop)
self.main_sizer.Add(self.statustext, 0, wx.CENTER | wx.ALL | 100, 5) self.main_sizer.Add(self.statustext, 0, wx.CENTER | wx.ALL | 100, 5)
@ -186,6 +197,7 @@ class ServerPanel(wx.Panel):
self.main_sizer.Add(secondary_frame_button, 0, wx.CENTER | wx.ALL | 100, 5) self.main_sizer.Add(secondary_frame_button, 0, wx.CENTER | wx.ALL | 100, 5)
self.SetSizer(self.main_sizer) self.SetSizer(self.main_sizer)
def handle_columns(self): def handle_columns(self):
for col in range(len(COLUMN_NAMES)): for col in range(len(COLUMN_NAMES)):
self.list_ctrl.InsertColumn(0, COLUMN_NAMES[col], width=COLUMN_SIZES[col]) self.list_ctrl.InsertColumn(0, COLUMN_NAMES[col], width=COLUMN_SIZES[col])
@ -203,12 +215,13 @@ class ServerPanel(wx.Panel):
else: else:
wx.CallLater(1000, self.updatedata) wx.CallLater(1000, self.updatedata)
return return
fprint("updatedata called") fprint("updatedata called", settings)
loaddata() loaddata()
#logData.doLogging(logData)
if self.list_ctrl.DeleteAllItems(): if self.list_ctrl.DeleteAllItems():
fprint("Items deleted") fprint("Items deleted", settings)
else: else:
fprint("Unable to delete") fprint("Unable to delete", settings)
for i in range(len(TEST_FILE)): for i in range(len(TEST_FILE)):
if str(TEST_FILE.iloc[i, 4]).find("TIME_WAIT") >= 0 or str(TEST_FILE.iloc[i, 4]).find("FIN_WAIT_2") >= 0: if str(TEST_FILE.iloc[i, 4]).find("TIME_WAIT") >= 0 or str(TEST_FILE.iloc[i, 4]).find("FIN_WAIT_2") >= 0:
continue continue
@ -236,19 +249,29 @@ class ServerPanel(wx.Panel):
wx.CallLater(1000, self.updatedata) wx.CallLater(1000, self.updatedata)
def on_start(self, event): def on_start(self, event):
fprint('in on_start') fprint('in on_start', settings)
settings["running"] = True settings["running"] = True
def on_stop(self, event): def on_stop(self, event):
fprint('in on_stop') fprint('in on_stop', settings)
settings["running"] = False settings["running"] = False
util.clear_fwll() util.clear_fwll()
def on_window(self, event): def on_window(self, event):
fprint("open settings") fprint("open settings", settings)
dg = GetData(parent = None) dg = GetData(parent = None)
dg.ShowModal() dg.ShowModal()
def on_log(self, event):
fprint("open log", settings)
dg = logData(parent = None)
#fprint("attempting logLoop", settings)
logData.logLoop(dg)
#fprint("did logLoop work?", settings)
dg.ShowModal()
def ShowImage(self, imageFile): def ShowImage(self, imageFile):
if imageFile == "": if imageFile == "":
self.bitmap = wx.StaticBitmap(self, -1, size=(0, 0)) self.bitmap = wx.StaticBitmap(self, -1, size=(0, 0))
@ -277,19 +300,64 @@ def openwindow(data, sets, kill):
displaydata = data displaydata = data
settings = sets settings = sets
if settings["loggedin"]: if settings["loggedin"]:
fprint("Creating server panel") fprint("Creating server panel", settings)
loaddata() loaddata()
app = wx.App(False) app = wx.App(False)
frame = OtherFrame() frame = OtherFrame()
frame.SetIcon(wx.Icon(find_data_file("icon.ico"), wx.BITMAP_TYPE_ICO)) frame.SetIcon(wx.Icon(find_data_file("icon.ico"), wx.BITMAP_TYPE_ICO))
app.MainLoop() app.MainLoop()
else: else:
fprint("Creating login panel") fprint("Creating login panel", settings)
app = wx.App(False) app = wx.App(False)
frame = ServerFrame() frame = ServerFrame()
frame.SetIcon(wx.Icon(find_data_file("icon.ico"), wx.BITMAP_TYPE_ICO)) frame.SetIcon(wx.Icon(find_data_file("icon.ico"), wx.BITMAP_TYPE_ICO))
app.MainLoop() app.MainLoop()
class RedirectText(object):
def __init__(self,aWxTextCtrl):
self.out = aWxTextCtrl
def write(self,string):
self.out.WriteText(string)
class logData(wx.Dialog):
def __init__(self, parent):
wx.Dialog.__init__(self, parent, wx.ID_ANY, "Logs: ", size = (800,500))
self.p = wx.Panel(self, wx.ID_ANY)
#self.logBox = wx.BoxSizer(wx.VERTICAL)
self.logsTitle = wx.StaticText(self.p, label="Logs", pos=(20,20))
self.logs = wx.TextCtrl(self.p, pos=(20,40), size= (700, 400), style=wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)
self.logs.WriteText("init\n")
#keepLoop = False
def logLoop(self):
self.logs.WriteText("before while loop\n")
i=0
if (settings["logMsg"] is not None):
while(i < len(settings["logMsg"])):
#for i in range(len(settings["logMsg"])):
#self.logs.WriteText("in while loop\n")
self.logs.WriteText(settings["logMsg"][i])
self.logs.WriteText("\n")
i+=1
else:
self.logs.WriteText("settings is none :(")
settings["logMsg"].add("init string for list")
logData.logLoop(self)
self.logs.WriteText("after while loop\n")
#redir = RedirectText(self.logs)
#sys.stdout = redir
#self.logs.WriteText(redir)
#self.logs.LoadFile('output.log')
#def doLogging(self):
#self.logs.WriteText("hi from doLogging\n")
#self.logs.WriteText(settings["logMsg"])
class GetData(wx.Dialog): class GetData(wx.Dialog):
def __init__(self, parent): def __init__(self, parent):
@ -338,7 +406,7 @@ class GetData(wx.Dialog):
def OnQuit(self, event): def OnQuit(self, event):
# save changes # save changes
fprint("saving changes...") fprint("saving changes...", settings)
config = settings["config"] config = settings["config"]
config["sftp"]["host"] = self.hostnametext.GetValue() config["sftp"]["host"] = self.hostnametext.GetValue()
config["sftp"]["user"] = self.usertext.GetValue() config["sftp"]["user"] = self.usertext.GetValue()

@ -5,25 +5,25 @@ from util import setup_child
from util import fprint from util import fprint
from invoke import exceptions from invoke import exceptions
import sys import sys
settings = None
def sftp_send_data(config, filename, filetype): def sftp_send_data(config, filename, filetype):
setup_child() setup_child()
fprint("Connecting over SSH to " + config['sftp']['host']) fprint("Connecting over SSH to " + config['sftp']['host'], settings)
c = Connection(host=config['sftp']['host'], user=config['sftp']['user'], port=config['sftp']['port'], connect_kwargs={"key_filename": find_data_file(config['sftp']['keyfile']),}) c = Connection(host=config['sftp']['host'], user=config['sftp']['user'], port=config['sftp']['port'], connect_kwargs={"key_filename": find_data_file(config['sftp']['keyfile']),})
fprint("Sending data over SFTP: " + filename) fprint("Sending data over SFTP: " + filename, settings)
fprint(c.put(find_data_file(filename), remote=config['sftp']['filepath'][filetype])) fprint(c.put(find_data_file(filename), remote=config['sftp']['filepath'][filetype]), settings)
fprint("Data sent over SFTP successfully") fprint("Data sent over SFTP successfully", settings)
#command = 'ls ' + config['sftp']['filepath'][filetype] #command = 'ls ' + config['sftp']['filepath'][filetype]
#fprint(c.run(command)) #fprint(c.run(command))
def check_for_file(config, filename, location): def check_for_file(config, filename, location):
setup_child() setup_child()
fprint("Connecting over SSH to " + config['sftp']['host']) fprint("Connecting over SSH to " + config['sftp']['host'], settings)
c = Connection(host=config['sftp']['host'], user=config['sftp']['user'], port=config['sftp']['port'], connect_kwargs={"key_filename": find_data_file(config['sftp']['keyfile']),}) c = Connection(host=config['sftp']['host'], user=config['sftp']['user'], port=config['sftp']['port'], connect_kwargs={"key_filename": find_data_file(config['sftp']['keyfile']),})
fprint("Checking for existence of file " + config['sftp']['filepath'][location] + "/" + filename) fprint("Checking for existence of file " + config['sftp']['filepath'][location] + "/" + filename, settings)
try: try:
res = c.run("ls -l " + config['sftp']['filepath'][location] + "/" + filename, hide=True) res = c.run("ls -l " + config['sftp']['filepath'][location] + "/" + filename, hide=True)
fprint("File " + filename + " exists!") fprint("File " + filename + " exists!", settings)
return c.run("cat " + config['sftp']['filepath'][location] + "/" + filename, hide=True) return c.run("cat " + config['sftp']['filepath'][location] + "/" + filename, hide=True)
except exceptions.UnexpectedExit: except exceptions.UnexpectedExit:
return False return False
@ -32,9 +32,9 @@ def run_ssh(config, command, location):
setup_child() setup_child()
fprint("Connecting over SSH to " + config['sftp']['host']) fprint("Connecting over SSH to " + config['sftp']['host'])
c = Connection(host=config['sftp']['host'], user=config['sftp']['user'], port=config['sftp']['port'], connect_kwargs={"key_filename": find_data_file(config['sftp']['keyfile']),}) c = Connection(host=config['sftp']['host'], user=config['sftp']['user'], port=config['sftp']['port'], connect_kwargs={"key_filename": find_data_file(config['sftp']['keyfile']),})
fprint("cd to " + config['sftp']['filepath'][location]) fprint("cd to " + config['sftp']['filepath'][location], settings)
with c.cd(config['sftp']['filepath'][location]): with c.cd(config['sftp']['filepath'][location]):
fprint("Running ssh command: " + command) fprint("Running ssh command: " + command, settings)
res = c.run(command, hide=True, asynchronous=True) res = c.run(command, hide=True, asynchronous=True)
return res return res

@ -32,7 +32,7 @@ class TaskBarIcon(wx.adv.TaskBarIcon):
def CreatePopupMenu(self): def CreatePopupMenu(self):
menu = wx.Menu() menu = wx.Menu()
create_menu_item(menu, 'Control Panel', self.on_open) create_menu_item(menu, 'Control Panel', self.on_open)
#create_menu_item(menu, 'Login test', self.on_login) create_menu_item(menu, 'Login test', self.on_login)
menu.AppendSeparator() menu.AppendSeparator()
create_menu_item(menu, 'Exit', self.on_exit) create_menu_item(menu, 'Exit', self.on_exit)
return menu return menu
@ -42,7 +42,7 @@ class TaskBarIcon(wx.adv.TaskBarIcon):
self.SetIcon(icon, TRAY_TOOLTIP) self.SetIcon(icon, TRAY_TOOLTIP)
def on_left_down(self, event): def on_left_down(self, event):
fprint ('Tray icon was left-clicked.') fprint ('Tray icon was left-clicked.', settings)
def on_open(self, event): def on_open(self, event):
settings["showui"] = True settings["showui"] = True
@ -81,7 +81,7 @@ def background(data, sets, kill):
app = TaskbarApp(False) app = TaskbarApp(False)
displaydata = data displaydata = data
settings = sets settings = sets
fprint("Creating taskbar icon") fprint("Creating taskbar icon", settings)
app.MainLoop() app.MainLoop()
TRAY_ICON = find_data_file('icon.png') TRAY_ICON = find_data_file('icon.png')

@ -7,11 +7,13 @@ import time as t
from time import sleep from time import sleep
import uuid import uuid
logMsg = ""
logCont = ""
win32 = platform == "win32" win32 = platform == "win32"
linux = platform == "linux" or platform == "linux2" linux = platform == "linux" or platform == "linux2"
macos = platform == "darwin" macos = platform == "darwin"
datafile = "" datafile = ""
settings=None
if win32: if win32:
sysid = hex(uuid.getnode()) sysid = hex(uuid.getnode())
datafile += sysid datafile += sysid
@ -43,21 +45,28 @@ def time():
def kill(pid): def kill(pid):
setup_child() setup_child()
if pid > 0: if pid > 0:
fprint("Killing PID " + str(pid)) fprint("Killing PID " + str(pid), settings)
os.kill(int(pid), 9) os.kill(int(pid), 9)
fprint("Signal 9 sent to PID " + str(pid)) fprint("Signal 9 sent to PID " + str(pid), settings)
def fprint(msg): def fprint(msg, settings = None):
#if not getattr(sys, "frozen", False): #if not getattr(sys, "frozen", False):
setup_child() setup_child(settings)
try: try:
frm = inspect.stack()[1] frm = inspect.stack()[1]
mod = inspect.getmodule(frm[0]) mod = inspect.getmodule(frm[0])
print('[' + mod.__name__ + ":" + frm.function + ']:', str(msg)) logMsg = '[' + mod.__name__ + ":" + frm.function + ']:' + str(msg)
print(logMsg)
if (settings is not None):
tmpList = settings["logMsg"]
tmpList.append(logMsg)
settings["logMsg"] = tmpList
except Exception as e: except Exception as e:
try: try:
print('[????:' + frm.function + ']:', str(msg)) print('[????:' + frm.function + ']:', str(msg))
print(e)
except: except:
print('[????]:', str(msg)) print('[????]:', str(msg))
@ -86,28 +95,38 @@ def run_cmd(cmd):
#else: #else:
# print("alt") # print("alt")
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW # , "-WindowStyle", "hidden" startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW # , "-WindowStyle", "hidden"
fprint("running PS command: " + cmd) fprint("running PS command: " + cmd, settings)
completed = subprocess.run(["powershell", "-Command", cmd], capture_output=True, startupinfo=startupinfo) completed = subprocess.run(["powershell", "-Command", cmd], capture_output=True, startupinfo=startupinfo)
fprint("ran PS command successfully") fprint("ran PS command successfully", settings)
#completed = subprocess.run(["powershell", "-WindowStyle", "hidden", "-Command", cmd], capture_output=True, startupinfo=startupinfo) #completed = subprocess.run(["powershell", "-WindowStyle", "hidden", "-Command", cmd], capture_output=True, startupinfo=startupinfo)
return completed return completed
if linux: if linux:
fprint("running sh command: " + cmd) fprint("running sh command: " + cmd, settings)
completed = subprocess.run(["sh", "-c", cmd], capture_output=True) completed = subprocess.run(["sh", "-c", cmd], capture_output=True)
fprint("ran sh command successfully") fprint("ran sh command successfully", settings)
return completed return completed
def setup_child(): def setup_child(sets=None):
if not getattr(sys, "frozen", False): if not getattr(sys, "frozen", False):
sys.stdout = Logger(filename=find_data_file("output.log")) sys.stdout = Logger(filename=find_data_file("output.log"))
sys.stderr = Logger(filename=find_data_file("output.log")) sys.stderr = Logger(filename=find_data_file("output.log"))
if sets is not None:
settings = sets
class Logger(object): class Logger(object):
def __init__(self, filename="output.log"): def __init__(self, filename="output.log"):
self.string = ""
self.log = open(filename, "a") self.log = open(filename, "a")
self.terminal = sys.stdout self.terminal = sys.stdout
def write(self, message): def write(self, message):
self.string += message
self.string += "\n"
self.log.write(message) self.log.write(message)
#close(filename) #close(filename)
#self.log = open(filename, "a") #self.log = open(filename, "a")

Loading…
Cancel
Save