Hi @all,
ich bin absoluter Python-Newbie und habe eine kleine Erweiterung für das WebIF erstellt, allerdings muss dafür die "WebScreens.py" gepatched werden.
Ist es irgendwie möglich eigene Seiten zu implementieren, ohne das originale WebIF "anzufassen" (Klassen-Vererbung z.B.)?
Des Weiteren wäre es auch sehr interessant zu wissen, ob eigene Menü-Einträge im Header-Menü oder in den Sub-Menüs (z.B. Extras) ohne Patchen möglich sind.
Vielen Dank für alle Tipps & Tricks.
Nachfolgend meine Erweiterung "HTTP-ShellExec"...
Beschreibung:
HTTP-ShellExec dient zum Ausführen von Bash-Skripten/-Befehle.
Warum braucht man sowas?! Hmm, in meinem Fall ist es z.B. das Fernsteuern der Receiver in meinem Haus.
Bei mir läuft ein kleiner Linux-Server, der von außen erreichbar ist (die Receiver beabsichtigt nicht), von dem man die Receiver dann dennoch per WebIF (wget/bash) abfragen/steuern kann, also z.B. auch mal ein Reboot ausführen kann.
Beispiele:
Hello World: "http://DeineDreamBoxIP/web/shellexec?http_shell&bash&'echo Hello World'"
Total Memory: "http://DeineDreamBoxIP/web/shellexec?http_shell&mem&t"
Free Memory: "http://DeineDreamBoxIP/web/shellexec?http_shell&mem&f"
Used Memory: "http://DeineDreamBoxIP/web/shellexec?http_shell&mem&u"
Memory: "http://DeineDreamBoxIP/web/shellexec?http_shell&bash&free"
Kernel Buffer anzeigen (max. die letzten 100 Zeilen): "http://DeineDreamBoxIP/web/shellexec?http_shell&bash&dmesg | tail -n 100"
Uptime: "http://DeineDreamBoxIP/web/shellexec?http_shell&bash&uptime"
CPU-Info: "http://DeineDreamBoxIP/web/shellexec?http_shell&bash&'cat /proc/cpuinfo'"
Return:
HTTP-ShellExec liefert die Skript-Ausgaben per XML zurück, welche sich z.B. per PHP parsen/auswerten lassen.
Bsp. "http://DeineDreamBoxIP/web/shellexec?http_shell&bash&free":
<?xml version="1.0" encoding="UTF-8"?>
<e2shellexec>
<e2shell>total used free shared buffers
Mem: 157764 82788 74976 0 1148
Swap: 131072 0 131072
Total: 288836 82788 206048</e2shell>
</e2shellexec>
WebScreens.py (Patch):
--- K:/DM800HD/WebInterface/WebScreens.py Sat May 16 09:54:38 2009
+++ K:/DM800HD/Plugins/_own/WebInterface/WebScreens.py Sat May 16 10:05:32 2009
@@ -1,6 +1,8 @@
from enigma import eServiceReference
from Screens.Screen import Screen
from WebComponents.Sources.RequestData import RequestData
+# MailMan
+from WebComponents.Sources.ShellExec import ShellExec
class WebScreen(Screen):
def __init__(self, session, request):
@@ -13,6 +15,12 @@
#use it, if you dont need any source, just to can do a static file with an xml-file
def __init__(self, session, request):
WebScreen.__init__(self, session, request)
+
+# MailMan
+class ShellExecWebScreen(WebScreen):
+ def __init__(self, session, request):
+ WebScreen.__init__(self, session, request)
+ self["ShellExec"] = ShellExec(session, self.request.uri)
class UpdateWebScreen(WebScreen):
def __init__(self, session, request):
Alles anzeigen
web/shellexec.xml:
<e2:screen name="ShellExecWebScreen"><?xml version="1.0" encoding="UTF-8"?>
<e2shellexec>
<e2shell><e2:element source="ShellExec">
<e2:convert type="web:TextToXML" />
</e2:element></e2shell>
</e2shellexec>
</e2:screen>
WebComponents\Sources\ShellExec.py:
from Components.Sources.Source import Source
from urlparse import urlparse
class ShellExec(Source):
def __init__(self, session, uri = None):
Source.__init__(self)
self.session = session
self.uri = uri
def command(self):
o = urlparse(self.uri)
qs = o.query
if qs is not None:
import os
import re
import cgi
param = ''
p = re.split('\&', qs)
l = len(p)
script = ("/usr/script/%s.sh" % p[0])
if l > 1:
for i in range(1, l):
dp = ''
tmp = cgi.parse_qs(p[i], True)
for (k, v) in tmp.items():
dp = k
break
param = param + ' ' + dp
(stdin, stdout) = os.popen4(script+param)
return stdout.read().strip()
else:
return "Script not found or unkwnown parameter!"
text = property(command)
Alles anzeigen
/usr/script/http_shell.sh:
#!/bin/sh
# $Id: http_shell.sh 498 2009-04-05 12:33:46Z MailMan $
# HTTP-ShellExec 1.0 - 04/05/2009
# Author: MailMan (http://www.newnigma2.to)
# Execute: http://DREAM-IP/web/shellexec?http_shell&PARAM1&PARAM2...
# http://192.168.0.15/web/shellexec?http_shell&bash&uptime
# Path: /usr/script/http_shell.sh
# **********************************************************
case "$1" in
'mem')
case "$2" in
't')
# total memory
free | grep 'Total' | awk '{print $2}'
;;
'f')
# free memory
free | grep 'Total' | awk '{print $4}'
;;
'u')
# used memory
free | grep 'Total' | awk '{print $3}'
;;
*)
# returns a pipe separated string, e.g. TOTAL|USED|FREE
free | grep 'Total' | awk '{print $2"|"$3"|"$4}'
;;
esac
;;
'bash')
if [ ! -z "$2" ]; then
cmd="$2"
eval "$cmd"
else
echo "Unknown parameter!"
fi
;;
*)
echo "Unknown parameter!"
;;
esac
exit 0
Alles anzeigen