Hi,
Ich hoffe das ihr mir helfen könnt. Ich hab ne Aufgabe die ich mit Hilfe von Python realisieren möchte. Ich habe keine große Python Kenntnisse. Die Aufgabe, wurde letztes Jahr von einem Kollegen programmiert. Die Programmierte Webseite, möchte ich auffrischen und einige Änderungen vornehmen.
Kurze Problemstellung:
Das Gerät hat 10 Video-Eingänge und 10 Video-Ausgänge, mithilfe eines Skripts lässt sich dies von der Webseite aus ansprechen und steuern. Also z.b. Eingang 1 wird mit Ausgang 2 verbinden.
Die Ein- und Ausgänge werden auf der Web seite von 1 bis 10 ausgegeben. siehe Bild und Skript
Ich möchte nun, statt die Ausgabe von 1 bis 10, diese mit einem Namen vergeben...
statt die "1" soll er den Namen HNO bekommen u.s.w.
und das möchte ich mit allen Ein- und Ausgängen machen...
So sieht es momentan aus.
Eingänge 1 2 3 4 5 6 7 8 9 10
Ausgänge 1 2 3 4 5 6 7 8 9 10
Und so hätte ich es gerne, ist leider nicht so einfach wie es sich’s anhört.
Eingänge HNO OP1 Frauenklinik Augenklinik u.s.w.
Ausgänge G. Hörsaal K. Hörsaal u.s.w.
Skript: //
#!/usr/bin/python
"""
Dieses Skript dient zur Steuerung der Kreuzschiene über einen Com-Server
für die Schaltung von Videoübertragungen
Autor: Christian Maus
Datum: 27.02.2002
"""
import cgi,string,select,time
from socket import *
"""Hier sind die Konstanten für die Adresse und Port des Com-Servers eingetragen """
SERVER_PORT=6000
SERVER_IPS = ["10.10.90.7"]
PORTS = {
"10.10.90.7" : { 1 : "Kreuzschiene im UG", 2 : "OP1-HNO", 3 : "OP1-Augen", 4 : "Laser-OP1-Augen", 5 : "", 6 : "", 7 : "" , 8 : "", 9 : "", 10 : "" }
}
"""Hier werden die Farben deklariert mit denen die Verbindungen dargestellt werden"""
COLORS = ["#0000FF","#FF0000" ,"#CC9900","#99CC33","#009900","#FF9900","#FFCC00","#99FFCC","#33CCFF","#CCFFFF", "#99FF99", "#00FF00" ,"#33CC99" ,"#CC9999","#CC66FF"]
#Farbe für nicht geschaltete Ein-Ausgänge definieren
EMPTY = "#EFEFEF"
"""Die Funktion get_status gibt ein Dictionary mit den Eingängen als Schlüssel und den geschalteten Ausgängen als Werte zurück """
def get_status():
antwort = sende_befehl("D\r\n",formular["ip"].value,SERVER_PORT)
#Zweite zeile wird nicht benötigt
antwort = antwort.split("\r\n")[0]
#Array erstellen
status = antwort.split("OV")
from_to = {}
for item in status:
if item != "":
from_to[int(item.split(",")[0])]=int(item.split(",")[1])
#Ausgang:Eingang (beides Integer-Werte)
return from_to
"""Die Funktion sende_befehl sendet einen übergebenen String an den Com-Server, liest die
Antwort aus und gibt diese zurück. Bei Fehler wird der Leerstring zurück gegeben"""
def sende_befehl(befehl,ip,port):
datas =""
#Socket erstellen und verbinden
sockobj = socket(AF_INET, SOCK_STREAM)
try:
sockobj.connect ((ip,port))
except:
sockobj.close()
return datas
#Die ersten Bytes enthalten den 'Anmeldeschirm' des Comservers, diese interessieren nicht
sockobj.recv(512)
sockobj.send(befehl)
#Antwort lesen, Abbruch bei 0,2 Sekunden ohne Aktivität
while 1:
result, dont_care, either = select.select([sockobj],[],[],0.2)
if result != []:
datas = datas +sockobj.recv(1024)
else: break
sockobj.close()
return datas
############################################################################################################
# Das eigentliche Skript
############################################################################################################
print "Content-type: text/html\n\n"
print "<html>\n"
#Formulardaten holen
formular = cgi.FieldStorage()
if not formular.has_key("ip"):
print "<h2>Bitte Kreuzschiene ausw&hlen</h2>"
print "<form>"
print "<select name=\"ip\">"
for i in range(len(SERVER_IPS)):
print "<option>%s</option>" %SERVER_IPS
print "</select>"
print "<input type=\"submit\" action=\"edinneu.py\" value=\"Verbinden\">"
print "</form>"
else:
#Befehle ausführen
#Eingang zu Ausgang schalten
if formular.has_key("zu"):
if formular.has_key("von"):
befehl = "SB%s,%s\r\n" %(formular["zu"].value, formular["von"].value)
#Ausgang zurücksetzen
else:
befehl = "SB%s,00\r\n" %formular["zu"].value
sende_befehl(befehl,formular["ip"].value,SERVER_PORT)
#Dem Com-Server Zeit geben die verbindung zu trennen
time.sleep(0.2)
elif formular.has_key("Reset"):
sende_befehl("R\r\n",formular["ip"].value,SERVER_PORT)
time.sleep(0.2)
#Status erfragen
status = get_status()
#Wenn keine Socketverbindung möglich, dann Fehler anzeigen
if not len(status):
print "<h2 style=\"color:red\">Fehler: keine Verbindung zum Com-Server m&glich</h2>"
print "<h4>wom&glich besteht noch eine offene Verbindung</h4>"
else:
print "<html><head><title>Kreuzschiene</title></head><body>"
print "<h2>Hier werden die Ein- und Ausg&nge der Kreuzschiene geschaltet</h2>"
print "<h3>Um einzelnen Ausgang zur&ckzusetzen, nur den Ausgangsknopf anklicken</h3>"
print "<form>"
print "<table>"
print " <tr><td>Eing&nge</td>"
#Eingänge darstellen
for i in range(1,11):
if i < 11:
#nicht geschaltete Eingänge
if not i in status.values():
print " <td bgcolor=\"%s\"><input name=\"von\" type=\"radio\" value=\"%d\">%d</input></td>" %(EMPTY,i,i)
else:
#geschaltete Eingänge
for out in status.keys():
if status[out] == i:
print " <td bgcolor=\"%s\"><input name=\"von\" type=\"radio\" value=\"%d\">%d</input></td>" %(COLORS[out-1],i,i)
else:
print " <td>&</td>"
print " </tr>"
#Ausgänge darstellen
print " <tr><td>Ausg&nge</td> "
for i in range(1,11):
#geschaltete Ausgänge
if status:
print " <td bgcolor=\"%s\"><input name=\"zu\" type=\"radio\" value=\"%d\">%d</input></td>" %(COLORS[i-1],i,i)
else:
#freie Ausgänge
print " <td bgcolor=\"#efefef\"><input name=\"zu\" type=\"radio\" value=\"%d\">%d</input></td>" %(i,i)
print " </tr>"
print "</table>"
pri
print "<p>"
print "<table>"
print "<tr><td colspan=\"2\">Eingangsbeschreibung</td></tr>"
for i in range(1,10):
#nicht geschaltet
if not i in status.values():
print " <tr><td bgcolor=\"#efefef\">%d</td><td bgcolor=\"#efefef\">%s</td></tr>" %(i,PORTS[formular["ip"].value])
else:
#geschaltete Eingänge
for out in status.keys():
if status[out] == i:
print " <tr><td bgcolor=\"%s\">%d</td><td bgcolor=\"%s\">%s</td></tr>" %(COLORS[out-1],i,COLORS[out-1],PORTS[formular["ip"].value])
print "</table>"
print "<p>"
print "<input type=\"hidden\" name=\"ip\" value=%s>" %formular["ip"].value
print "<input type=\"submit\" action=\"edinneu.py\">"
print "<input type=\"submit\" action=\"edinneu.py\" name=\"Reset\" value=\"Reset\">"
print "</form>"
print "</html>"
Ich hoffe ihr könnt mir helfen.
Gruß
Nicole
die Webseite umändern
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Nicole,
setzte deinen Code bitte in [code]...[/code]
dann bleiben die Einrückungen erhalten. So ist er nicht zu lesen.
Programmzeilen sollten auch nicht länger als 79 Zeichen sein.
Gruß
Dookie
setzte deinen Code bitte in [code]...[/code]
dann bleiben die Einrückungen erhalten. So ist er nicht zu lesen.
Programmzeilen sollten auch nicht länger als 79 Zeichen sein.
Gruß
Dookie
Entschudlige, ich hatte zuvor nicht gewusst, wie ich es mit der Formatierung machen sollte.
Ich sitze schon nun mehr als 2 Wochen dran, aber habe leider keine große Ahnung, wie ich es machen muss.Werde erst in 4 Wochen ein Pythonkurs machen. Ich möchte nur, das die Eingänge und Ausgänge nicht mit nummer ausgegeben werden, sondern stattdessen ein Namen bekommen. Aber ohne das es zu problemen kommt. Die Webseite fängt im skript erst bei der kommentierung "Das eigentliche Skript " siehe Skript.
Kurze Problemstellung:
Das Gerät hat 10 Video-Eingänge und 10 Video-Ausgänge, mithilfe eines Skripts lässt sich dies von der Webseite aus ansprechen und steuern. Also z.b. Eingang 1 wird mit Ausgang 2 verbunden.
Die Ein- und Ausgänge werden auf der Web seite von 1 bis 10 ausgegeben. siehe Bild und Skript
Ich möchte nun, statt die Ausgabe von 1 bis 10, diese mit einem Namen vergeben...
statt die "1" soll er den Namen HNO bekommen u.s.w.
und das möchte ich mit allen Ein- und Ausgängen machen...
So sieht es momentan aus.
Eingänge 1 2 3 4 5 6 7 8 9 10
Ausgänge 1 2 3 4 5 6 7 8 9 10
So sollte es z.B. aussehen:
Eingänge: HNO OP1 Frauenklinik Augenklinik u.s.w.
Ausgänge: G. Hörsaal K. Hörsaal u.s.w.
Hier ist nun der eigentlich Skript:
Ich würde mich über eine Lösung natürlich sehr freuen. Und bin euch ebenso sehr dankbar.
Gruß
Nicole
Ich sitze schon nun mehr als 2 Wochen dran, aber habe leider keine große Ahnung, wie ich es machen muss.Werde erst in 4 Wochen ein Pythonkurs machen. Ich möchte nur, das die Eingänge und Ausgänge nicht mit nummer ausgegeben werden, sondern stattdessen ein Namen bekommen. Aber ohne das es zu problemen kommt. Die Webseite fängt im skript erst bei der kommentierung "Das eigentliche Skript " siehe Skript.
Kurze Problemstellung:
Das Gerät hat 10 Video-Eingänge und 10 Video-Ausgänge, mithilfe eines Skripts lässt sich dies von der Webseite aus ansprechen und steuern. Also z.b. Eingang 1 wird mit Ausgang 2 verbunden.
Die Ein- und Ausgänge werden auf der Web seite von 1 bis 10 ausgegeben. siehe Bild und Skript
Ich möchte nun, statt die Ausgabe von 1 bis 10, diese mit einem Namen vergeben...
statt die "1" soll er den Namen HNO bekommen u.s.w.
und das möchte ich mit allen Ein- und Ausgängen machen...
So sieht es momentan aus.
Eingänge 1 2 3 4 5 6 7 8 9 10
Ausgänge 1 2 3 4 5 6 7 8 9 10
So sollte es z.B. aussehen:
Eingänge: HNO OP1 Frauenklinik Augenklinik u.s.w.
Ausgänge: G. Hörsaal K. Hörsaal u.s.w.
Hier ist nun der eigentlich Skript:
Code: Alles auswählen
############################################################################################################
# Das eigentliche Skript
############################################################################################################
print "Content-type: text/html\n\n"
print "<html>\n"
#Formulardaten holen
formular = cgi.FieldStorage()
if not formular.has_key("ip"):
print "<h2>Bitte Kreuzschiene ausw&hlen</h2>"
print "<form>"
print "<select name=\"ip\">"
for i in range(len(SERVER_IPS)):
print "<option>%s</option>" %SERVER_IPS[i]
print "</select>"
print "<input type=\"submit\" action=\"edinneu.py\" value=\"Verbinden\">"
print "</form>"
else:
#Befehle ausführen
#Eingang zu Ausgang schalten
if formular.has_key("zu"):
if formular.has_key("von"):
befehl = "SB%s,%s\r\n" %(formular["zu"].value, formular["von"].value)
#Ausgang zurücksetzen
else:
befehl = "SB%s,00\r\n" %formular["zu"].value
sende_befehl(befehl,formular["ip"].value,SERVER_PORT)
#Dem Com-Server Zeit geben die verbindung zu trennen
time.sleep(0.2)
elif formular.has_key("Reset"):
sende_befehl("R\r\n",formular["ip"].value,SERVER_PORT)
time.sleep(0.2)
#Status erfragen
status = get_status()
#Wenn keine Socketverbindung möglich, dann Fehler anzeigen
if not len(status):
print "<h2 style=\"color:red\">Fehler: keine Verbindung zum Com-Server m&glich</h2>"
print "<h4>wom&glich besteht noch eine offene Verbindung</h4>"
else:
print "<html><head><title>Kreuzschiene</title></head><body>"
print "<h2>Hier werden die Ein- und Ausg&nge der Kreuzschiene geschaltet</h2>"
print "<h3>Um einzelnen Ausgang zur&ckzusetzen, nur den Ausgangsknopf anklicken</h3>"
print "<form>"
print "<table>"
print " <tr><td>Eing&nge</td>"
#Eingänge darstellen
for i in range(1,11):
if i < 11:
#nicht geschaltete Eingänge
if not i in status.values():
print " <td bgcolor=\"%s\"><input name=\"von\" type=\"radio\" value=\"%d\">%d</input></td>" %(EMPTY,i,i)
else:
#geschaltete Eingänge
for out in status.keys():
if status[out] == i:
print " <td bgcolor=\"%s\"><input name=\"von\" type=\"radio\" value=\"%d\">%d</input></td>" %(COLORS[out-1],i,i)
else:
print " <td>&</td>"
print " </tr>"
#Ausgänge darstellen
print " <tr><td>Ausg&nge</td> "
for i in range(1,11):
#geschaltete Ausgänge
if status[i]:
print " <td bgcolor=\"%s\"><input name=\"zu\" type=\"radio\" value=\"%d\">%d</input></td>" %(COLORS[i-1],i,i)
else:
#freie Ausgänge
print " <td bgcolor=\"#efefef\"><input name=\"zu\" type=\"radio\" value=\"%d\">%d</input></td>" %(i,i)
print " </tr>"
print "</table>"
pri
print "<p>"
print "<table>"
print "<tr><td colspan=\"2\">Eingangsbeschreibung</td></tr>"
for i in range(1,10):
#nicht geschaltet
if not i in status.values():
print " <tr><td bgcolor=\"#efefef\">%d</td><td bgcolor=\"#efefef\">%s</td></tr>" %(i,PORTS[formular["ip"].value][i])
else:
#geschaltete Eingänge
for out in status.keys():
if status[out] == i:
print " <tr><td bgcolor=\"%s\">%d</td><td bgcolor=\"%s\">%s</td></tr>" %(COLORS[out-1],i,COLORS[out-1],PORTS[formular["ip"].value][i])
print "</table>"
print "<p>"
print "<input type=\"hidden\" name=\"ip\" value=%s>" %formular["ip"].value
print "<input type=\"submit\" action=\"edinneu.py\">"
print "<input type=\"submit\" action=\"edinneu.py\" name=\"Reset\" value=\"Reset\">"
print "</form>"
print "</html>"
Gruß
Nicole
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Nicole,
hmm leider ist da wieder nichts formatiert.
Egal, ich versuchs mal so.
um von einer (fortlaufenden) Zahl auf einen passenden String zu bekommen, würde ich einfach eine Liste mit den Strings erstellen und dann den entsprechenden Index aus der Liste holen.
Ich hoffe ich konnte Dir etwas helfen.
Gruß
Dookie
hmm leider ist da wieder nichts formatiert.
Egal, ich versuchs mal so.
um von einer (fortlaufenden) Zahl auf einen passenden String zu bekommen, würde ich einfach eine Liste mit den Strings erstellen und dann den entsprechenden Index aus der Liste holen.
Code: Alles auswählen
in_list = ["HNO", "OP1",
"Frauenklinik",
"Augenklinik",
...]# muss noch ergänzt werden
out_list = ["G. Hörsaal",
"K. Hörsaal",
...]
for i in xrange(1,11):
print in_list[i-1] # wichtig -1 weil die Zahlen bei 1 beginnen, die Liste bei 0!
for i in xrange(1,11):
print out_list[i-1] # wieder -1 wie oben
Gruß
Dookie
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
hier mal im Code
ob das läuft kann ich leider nicht testen.
Gruß
Dookie
Code: Alles auswählen
#!/usr/bin/python
"""
Dieses Skript dient zur Steuerung der Kreuzschiene über einen Com-Server
für die Schaltung von Videoübertragungen
Autor: Christian Maus
Datum: 27.02.2002
"""
import cgi,string,select,time
from socket import *
"""Hier sind die Konstanten für die Adresse und Port des Com-Servers eingetragen """
SERVER_PORT=6000
SERVER_IPS = ["10.10.90.7"]
PORTS = {
"10.10.90.7" : { 1 : "Kreuzschiene im UG",
2 : "OP1-HNO",
3 : "OP1-Augen",
4 : "Laser-OP1-Augen",
5 : "",
6 : "",
7 : "" ,
8 : "",
9 : "",
10 : "" }
}
"""Hier werden die Farben deklariert mit denen die Verbindungen dargestellt werden"""
COLORS = ["#0000FF","#FF0000","#CC9900","#99CC33","#009900","#FF9900",
"#FFCC00","#99FFCC","#33CCFF","#CCFFFF","#99FF99",
"#00FF00","#33CC99","#CC9999","#CC66FF"]
#Farbe für nicht geschaltete Ein-Ausgänge definieren
EMPTY = "#EFEFEF"
"""Die Funktion get_status gibt ein Dictionary
mit den Eingängen als Schlüssel und
den geschalteten Ausgängen als Werte zurück """
def get_status():
antwort = sende_befehl("D\r\n",formular["ip"].value,SERVER_PORT)
#Zweite zeile wird nicht benötigt
antwort = antwort.split("\r\n")[0]
#Array erstellen
status = antwort.split("OV")
from_to = {}
for item in status:
if item != "":
from_to[int(item.split(",")[0])]=int(item.split(",")[1])
#Ausgang:Eingang (beides Integer-Werte)
return from_to
"""Die Funktion sende_befehl sendet einen übergebenen String an den Com-Server, liest die
Antwort aus und gibt diese zurück. Bei Fehler wird der Leerstring zurück gegeben"""
def sende_befehl(befehl,ip,port):
datas =""
#Socket erstellen und verbinden
sockobj = socket(AF_INET, SOCK_STREAM)
try:
sockobj.connect ((ip,port))
except:
sockobj.close()
return datas
#Die ersten Bytes enthalten den 'Anmeldeschirm' des Comservers, diese interessieren nicht
sockobj.recv(512)
sockobj.send(befehl)
#Antwort lesen, Abbruch bei 0,2 Sekunden ohne Aktivität
while 1:
result, dont_care, either = select.select([sockobj],[],[],0.2)
if result != []:
datas = datas +sockobj.recv(1024)
else: break
sockobj.close()
return datas
######################################################################################
# Das eigentlicheSkript
######################################################################################
"""*** from Dookie ***"""
in_list = ["HNO",
"OP1",
"Frauenklinik",
"Augenklinik",
"",
"",
"",
"",
"",
""]# muss noch ergänzt werden
out_list = ["G. Hörsaal",
"K. Hörsaal",
"",
"",
"",
"",
"",
"",
"",
""]# siehe oben
"""*** Ende from Dookie ***"""
print "Content-type: text/html\n\n"
print "<html>\n"
#Formulardaten holen
formular = cgi.FieldStorage()
if not formular.has_key("ip"):
print "<h2>Bitte Kreuzschiene ausw&hlen</h2>"
print "<form>"
print "<select name=\"ip\">"
for i in range(len(SERVER_IPS)):
print "<option>%s</option>" %SERVER_IPS[i]
print "</select>"
print "<input type=\"submit\" action=\"edinneu.py\" value=\"Verbinden\">"
print "</form>"
else:
#Befehle ausführen
#Eingang zu Ausgang schalten
if formular.has_key("zu"):
if formular.has_key("von"):
befehl = "SB%s,%s\r\n" %(formular["zu"].value, formular["von"].value)
#Ausgang zurücksetzen
else:
befehl = "SB%s,00\r\n" %formular["zu"].value
sende_befehl(befehl,formular["ip"].value,SERVER_PORT)
#Dem Com-Server Zeit geben die verbindung zu trennen
time.sleep(0.2)
elif formular.has_key("Reset"):
sende_befehl("R\r\n",formular["ip"].value,SERVER_PORT)
time.sleep(0.2)
#Status erfragen
status = get_status()
#Wenn keine Socketverbindung möglich, dann Fehler anzeigen
if not len(status):
print "<h2 style=\"color:red\">Fehler: keine Verbindung zum Com-Server m&glich</h2>"
print "<h4>wom&glich besteht noch eine offene Verbindung</h4>"
else:
print "<html><head><title>Kreuzschiene</title></head><body>"
print "<h2>Hier werden die Ein- und Ausg&nge der Kreuzschiene geschaltet</h2>"
print "<h3>Um einzelnen Ausgang zur&ckzusetzen, nur den Ausgangsknopf anklicken</h3>"
print "<form>"
print "<table>"
print " <tr><td>Eing&nge</td>"
#Eingänge darstellen
for i in range(1,11):
if i < 11:
#nicht geschaltete Eingänge
if not i in status.values():
print " <td bgcolor=\"%s\"><input name=\"von\" type=\"radio\" value=\"%d\">%s</input></td>" %(EMPTY,i,in_list[i-1])
else:
#geschaltete Eingänge
for out in status.keys():
if status[out] == i:
print " <td bgcolor=\"%s\"><input name=\"von\" type=\"radio\" value=\"%d\">%s</input></td>" %(COLORS[out-1],i,in_list[i-1])
else:
print " <td>&</td>"
print " </tr>"
#Ausgänge darstellen
print " <tr><td>Ausg&nge</td> "
for i in range(1,11):
#geschaltete Ausgänge
if status[i]:
print " <td bgcolor=\"%s\"><input name=\"zu\" type=\"radio\" value=\"%d\">%s</input></td>" %(COLORS[i-1],i,out_list[i-1])
else:
#freie Ausgänge
print " <td bgcolor=\"#efefef\"><input name=\"zu\" type=\"radio\" value=\"%d\">%s</input></td>" %(i,out_list[i-1])
print " </tr>"
print "</table>"
print "<p>"
print "<table>"
print "<tr><td colspan=\"2\">Eingangsbeschreibung</td></tr>"
for i in range(1,10):
#nicht geschaltet
if not i in status.values():
print " <tr><td bgcolor=\"#efefef\">%d</td><td bgcolor=\"#efefef\">%s</td></tr>" %(i,PORTS[formular["ip"].value][i])
else:
#geschaltete Eingänge
for out in status.keys():
if status[out] == i:
print " <tr><td bgcolor=\"%s\">%d</td><td bgcolor=\"%s\">%s</td></tr>" %(COLORS[out-1],i,COLORS[out-1],PORTS[formular["ip"].value][i])
print "</table>"
print "<p>"
print "<input type=\"hidden\" name=\"ip\" value=%s>" %formular["ip"].value
print "<input type=\"submit\" action=\"edinneu.py\">"
print "<input type=\"submit\" action=\"edinneu.py\" name=\"Reset\" value=\"Reset\">"
print "</form>"
print "</html>"
Gruß
Dookie