Das Programm, nimmt bash.sh Scripts und gibt sie auf ein Fenster wieder, Mann kann sie dann auswählen und starten. Aber sie werden leider nicht sortiert angezeigt.
Code: Alles auswählen
from Screens.Screen import Screen
from Components.ActionMap import ActionMap, NumberActionMap
from Components.MenuList import MenuList
from Components.Sources.List import List
from Screens.Console import Console
from Plugins.Plugin import PluginDescriptor
from Components.Button import Button
from Components.Label import Label
import os
path = "/usr/lib/enigma2/python/Plugins/Extensions/Run_Script/scripts/"
class Run_Script(Screen):
skin = """
<screen name="System Information" position="center,center" size="650,500" title="" >
<widget name="list" position="75,50" size="405,300" scrollbarMode="showOnDemand" />
<!--eLabel position="70,100" zPosition="-1" size="100,69" backgroundColor="#222222" /-->
<widget name="info" position="40,170" zPosition="4" size="680,200" font="Regular;18" foregroundColor="#ffffff" transparent="1" halign="left" valign="center" />
<!--ePixmap name="red" position="10,400" zPosition="2" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
<ePixmap name="green" position="150,400" zPosition="2" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
<ePixmap name="yellow" position="290,400" zPosition="2" size="140,40" pixmap="skin_default/buttons/yellow.png" transparent="1" alphatest="on" />
<ePixmap name="blue" position="430,400" zPosition="2" size="140,40" pixmap="skin_default/buttons/blue.png" transparent="1" alphatest="on" />
<widget name="key_red" position="10,400" size="140,40" valign="center" halign="center" zPosition="4" foregroundColor="white" font="Regular;20" transparent="1" shadowColor="#25062748" shadowOffset="-2,-2" />
<widget name="key_green" position="150,400" size="140,40" valign="center" halign="center" zPosition="4" foregroundColor="white" font="Regular;20" transparent="1" shadowColor="#25062748" shadowOffset="-2,-2" />
<widget name="key_yellow" position="290,400" size="140,40" valign="center" halign="center" zPosition="4" foregroundColor="white" font="Regular;20" transparent="1" shadowColor="#25062748" shadowOffset="-2,-2" />
<widget name="key_blue" position="430,400" size="140,40" valign="center" halign="center" zPosition="4" foregroundColor="white" font="Regular;20" transparent="1" shadowColor="background" shadowOffset="-2,-2" /-->
</screen>"""
def __init__(self, session, args = 0):
self.session = session
Screen.__init__(self, session)
self.skinName = "Run_Script"
self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
{
"ok": self.action,
"cancel": self.close,
}, -1)
self["list"] = MenuList([])
self["info"] = Label()
self.slist = []
title = "System Information"
self.setTitle(title)
for root, dirs, files in os.walk(path):
for name in files:
self.slist.append(name[:-3])
self["list"].setList(self.slist)
def action(self):
sel = self["list"].getSelectionIndex()
if sel is not None:
self.shname = self.slist[sel] + ".sh"
self.cmd = path + self.shname
self.viewLog()
else:
return
def viewLog(self):
title = _(self.shname[:-3])
# print "self.cmd", self.cmd
self.session.open(Console2,_(title),[self.cmd])
###################################
from enigma import eConsoleAppContainer
from Screens.Screen import Screen
from Components.ActionMap import ActionMap
from Components.ScrollLabel import ScrollLabel
class Console2(Screen):
#TODO move this to skin.xml
skin = """
<screen position="150,100" size="1070,425" title="Command execution..." >
<widget name="text" position="50,20" size="1000,375" font="Console;22" foregroundColor="#bab329" />
</screen>"""
def __init__(self, session, title = "Console", cmdlist = None, finishedCallback = None, closeOnSuccess = False):
Screen.__init__(self, session)
self.finishedCallback = finishedCallback
self.closeOnSuccess = closeOnSuccess
self["text"] = ScrollLabel("")
self["actions"] = ActionMap(["WizardActions", "DirectionActions"],
{
"ok": self.cancel,
"back": self.cancel,
"up": self["text"].pageUp,
"down": self["text"].pageDown
}, -1)
self.cmdlist = cmdlist
self.newtitle = title
self.onShown.append(self.updateTitle)
self.container = eConsoleAppContainer()
self.run = 0
self.container.appClosed.append(self.runFinished)
self.container.dataAvail.append(self.dataAvail)
self.onLayoutFinish.append(self.startRun) # dont start before gui is finished
def updateTitle(self):
self.setTitle(self.newtitle)
def startRun(self):
# self["text"].setText(_("Execution Progress:") + "\n\n")
# self["text"].setText(_(""))
print "Console: executing in run", self.run, " the command:", self.cmdlist[self.run]
if self.container.execute(self.cmdlist[self.run]): #start of container application failed...
self.runFinished(-1) # so we must call runFinished manual
def runFinished(self, retval):
self.run += 1
if self.run != len(self.cmdlist):
if self.container.execute(self.cmdlist[self.run]): #start of container application failed...
self.runFinished(-1) # so we must call runFinished manual
else:
str = self["text"].getText()
str += ("\n" + _("Execution finished!!"));
self["text"].setText(str)
self["text"].lastPage()
if self.finishedCallback is not None:
self.finishedCallback()
if not retval and self.closeOnSuccess:
self.cancel()
def cancel(self):
if self.run == len(self.cmdlist):
self.close()
self.container.appClosed.remove(self.runFinished)
self.container.dataAvail.remove(self.dataAvail)
def dataAvail(self, str):
self["text"].setText(self["text"].getText() + str)
###################################
def startConfig(session, **kwargs):
session.open(Run_Script)
def mainmenu(menuid):
if menuid != "mainmenu":
return [ ]
return [(_("Run_Script"), startConfig, "Run_Script", None)]
def Plugins(**kwargs):
return [PluginDescriptor(name=_("Run_Script"), where = PluginDescriptor.WHERE_MENU, fnc=mainmenu)]