Hi Gerold,
ein großes Danke (!) für die ausführliche Antwort.
Werde mich auf jeden Fall mit der Materie beschäftigen, weil ich die Telefonie in Zukunft über Asterisk machen will (mehrere Kanäle parallel) und der läuft auf jedem Linux-Server. Wenn ich das mit dem X-Server nicht hinkriegen sollte, muss ich mir eben einen Anbieter suchen, der mir unbegrenzte Ausführungszeit für meine Scripte genehmigt, die laufen dann eben permanent außerhalb des Apachen und warten auf Aufträge (so wie schon unter Windows/ Zope). Ich lerne nur auch gerne dazu und will alles optimieren und da werden mir deine Links sicherlich wieder bei helfen !
Viele Grüße, Seven
Im CGI Script subprocess und os.execv nicht möglich ?
-
- User
- Beiträge: 408
- Registriert: Freitag 7. Oktober 2005, 14:37
- Wohnort: Berlin
- Kontaktdaten:
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Sowas liest man gerne, echt. Wenn man sich in letzter Zeit die Anzahl Lern- und Denkresistenter Leute ansieht, dann ist sowas wie ein kleiner Siegsnakeseven hat geschrieben:Ich lerne nur auch gerne dazu und will alles optimieren und da werden mir deine Links sicherlich wieder bei helfen !
Wenn du Hilfe brauchst, dann kannst du ggf. auch ins Debianforum schauen, die Leute sind meist nett wenn man nett fragt und hilfreich.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 408
- Registriert: Freitag 7. Oktober 2005, 14:37
- Wohnort: Berlin
- Kontaktdaten:
Ja, Denkresistenz ist ein weit verbreitetes Phänomen
Für mich ist die Beschäftigung mit neuen Themen soetwas wie Brainjogging. Wenn ich resümiere, wieviel ich in diesem Forum das letzte halbe Jahr gelernt habe, dann ist das wirklich enorm und ich hoffe, dass ich das irgendwann mal zurückgeben kann !
Gruss, Seven
Für mich ist die Beschäftigung mit neuen Themen soetwas wie Brainjogging. Wenn ich resümiere, wieviel ich in diesem Forum das letzte halbe Jahr gelernt habe, dann ist das wirklich enorm und ich hoffe, dass ich das irgendwann mal zurückgeben kann !
Gruss, Seven
-
- User
- Beiträge: 408
- Registriert: Freitag 7. Oktober 2005, 14:37
- Wohnort: Berlin
- Kontaktdaten:
So, jetzt habe ich es erstmal mit '/usr/X11R6/bin/xhost +localhost' probiert und es wurde auch bestätigt, daß 'localhost' der access control list hinzu gefügt wurde. Apache wurde neu gestartet, doch leider hat es das Problem nicht gelöst. Die Variable $DISPLAY scheint unbekannt !? (Habe xhost daher erstmal wieder deaktiviert)
Gruss, Seven
Code: Alles auswählen
[Sat Nov 23 14:53:08 2002] [error] [client 127.0.0.1] no display name and no $DISPLAY environment variable
[Sat Nov 23 14:53:08 2002] [error] [client 127.0.0.1]
[Sat Nov 23 14:53:08 2002] [error] [client 127.0.0.1] Premature end of script headers: fenster.py
Der Apache säubert beim Start recht gründlich die Umgebungsvariablen. Hast Du schon versucht das DISPLAY wieder zu der Umgebung hinzuzufügen?
-
- User
- Beiträge: 408
- Registriert: Freitag 7. Oktober 2005, 14:37
- Wohnort: Berlin
- Kontaktdaten:
Kannst du mir kurz erklären wie das geht ? Habe in der Doku nichts dazu gefunden !?BlackJack hat geschrieben:...Hast Du schon versucht das DISPLAY wieder zu der Umgebung hinzuzufügen?
Gruss, Seven
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Seven!snakeseven hat geschrieben:Kannst du mir kurz erklären wie das geht ? Habe in der Doku nichts dazu gefunden !?BlackJack hat geschrieben:...Hast Du schon versucht das DISPLAY wieder zu der Umgebung hinzuzufügen?
os.environ["DISPLAY"] = ":0.0" funktioniert nicht?
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Seven!
Ich habe ein wenig experimentiert. Leider bekomme ich Snack nicht zum Laufen. Es schreibt mir bei "initializeSnack(root)" immer irgendetwas wie "can't find package snack". Auch wenn ich es nicht in einem CGI-Skript ausprobiere. Aber egal. Zumindest habe ich es geschaft ein Tkinter-Fenster von einem CGI-Skript aus anzuzeigen.
Hinweis: Ich verwende Gentoo-Linux. Deshalb kannst du nicht unbedingt davon ausgehen, dass es unter Suse exakt gleich funktioniert.
Zuerst habe ich Gentoo gestartet und mich an die grafische Oberfläche Gnome angemeldet. Du wirst unter Suse wahrscheinlich KDE verwenden. Das sollte aber keinen Unterschied machen. Warum ich das schreibe? Weil es eventuell für die Verwendung von "xhost" wichtig ist.
Dann startete ich ein Terminal und habe als normaler Benutzer (also nicht root) "xhost +" eingegeben. (Dessen Unsicherheit ist mir bewust. Meine Shorewall-Firewall ist dicht genug.)
Dann habe ich mein Apache so eingerichtet, dass CGI-Skripte im Ordner /home/gerold/public_html ausgeführt werden. Das habe ich noch schnell mit einem kleinen Testskript getestet. --> funktionierte einwandfrei.
Falls es jemanden interessiert. Das ist der Block, den ich leicht angepasst habe:
Dann habe ich mich an das CGI-Skript gemacht, das auf Tkinter zugreifen soll.
Nach ein paar Fehlermeldungen habe ich dieses Testskript ausgearbeitet (Ach ja, bevor ich es vergesse. Mein System läuft unter utf-8. Wenn deines unter einem anderen Coding läuft, dann würde ich die Angabe des Codings anpassen.):
Das dürfte als Testumgebung genügen.
Was dir aber noch bevor steht: Du musst das Ganze dann auf einem Internet-Server zum Laufen bekommen, an den du dich nicht so einfach an die grafische Oberfläche anmelden kannst.
Das heißt, du musst dich dann darum kümmern, dass auf dem Internet-Server, beim Starten, ein X-Server gestartet wird und dieser X-Server vom Benutzer, unter dem der Apache ausgeführt wird, verwendet werden kann. Du brauchst kein KDE oder Gnome. Der X-Server alleine sollte reichen. Das ist dann aber keine Python-Geschichte mehr. Damit bist du auf die Hilfe von erfahrenen Linux-Benutzern angewiesen.
lg
Gerold
Ich habe ein wenig experimentiert. Leider bekomme ich Snack nicht zum Laufen. Es schreibt mir bei "initializeSnack(root)" immer irgendetwas wie "can't find package snack". Auch wenn ich es nicht in einem CGI-Skript ausprobiere. Aber egal. Zumindest habe ich es geschaft ein Tkinter-Fenster von einem CGI-Skript aus anzuzeigen.
Hinweis: Ich verwende Gentoo-Linux. Deshalb kannst du nicht unbedingt davon ausgehen, dass es unter Suse exakt gleich funktioniert.
Zuerst habe ich Gentoo gestartet und mich an die grafische Oberfläche Gnome angemeldet. Du wirst unter Suse wahrscheinlich KDE verwenden. Das sollte aber keinen Unterschied machen. Warum ich das schreibe? Weil es eventuell für die Verwendung von "xhost" wichtig ist.
Dann startete ich ein Terminal und habe als normaler Benutzer (also nicht root) "xhost +" eingegeben. (Dessen Unsicherheit ist mir bewust. Meine Shorewall-Firewall ist dicht genug.)
Dann habe ich mein Apache so eingerichtet, dass CGI-Skripte im Ordner /home/gerold/public_html ausgeführt werden. Das habe ich noch schnell mit einem kleinen Testskript getestet. --> funktionierte einwandfrei.
Falls es jemanden interessiert. Das ist der Block, den ich leicht angepasst habe:
Code: Alles auswählen
#
# UserDir: The name of the directory that is appended onto a user's home
# directory if a ~user request is received.
# enable by adding -D USERDIR to /etc/conf.d/apache2
#
<IfModule mod_userdir.c>
UserDir public_html
#
# Control access to UserDir directories. The following is an example
# for a site where these directories are restricted to read-only.
#
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
# Enable this additional section if you would like to make use of a
# suexec-enabled cgi-bin directory on a per-user basis.
#
#<Directory /home/*/public_html/cgi-bin>
# Options ExecCGI
# SetHandler cgi-script
#</Directory>
<Directory /home/*/public_html/>
Options ExecCGI
SetHandler cgi-script
AddHandler cgi-script .py
</Directory>
</IfModule>
Nach ein paar Fehlermeldungen habe ich dieses Testskript ausgearbeitet (Ach ja, bevor ich es vergesse. Mein System läuft unter utf-8. Wenn deines unter einem anderen Coding läuft, dann würde ich die Angabe des Codings anpassen.):
Code: Alles auswählen
#!/usr/bin/python2.4
# -*- coding: utf-8 -*-
print "Content-Type: text/html"
print
import cgi
import cgitb; cgitb.enable()
import sys
import os
os.environ["DISPLAY"] = ":0.0"
from Tkinter import Tk
from tkSnack import Sound,initializeSnack
root = Tk()
#initializeSnack(root) # geht bei mir nicht
# Kopf
print \
"""<html>
<head>
</head>
<body>
"""
print "<p>Jetzt sollte das Fenster aufgehen</p>"
sys.stdout.flush() # Damit die Ausgabe jetzt angezeigt wird."
root.mainloop()
print "<p>Das Fenster wurde geschlossen</p>"
# Fuss
print \
"""
</body>
</html>
"""
Was dir aber noch bevor steht: Du musst das Ganze dann auf einem Internet-Server zum Laufen bekommen, an den du dich nicht so einfach an die grafische Oberfläche anmelden kannst.
Das heißt, du musst dich dann darum kümmern, dass auf dem Internet-Server, beim Starten, ein X-Server gestartet wird und dieser X-Server vom Benutzer, unter dem der Apache ausgeführt wird, verwendet werden kann. Du brauchst kein KDE oder Gnome. Der X-Server alleine sollte reichen. Das ist dann aber keine Python-Geschichte mehr. Damit bist du auf die Hilfe von erfahrenen Linux-Benutzern angewiesen.
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- User
- Beiträge: 408
- Registriert: Freitag 7. Oktober 2005, 14:37
- Wohnort: Berlin
- Kontaktdaten:
Hallo Gerold,
wiedereinmal VIELEN DANK (!) für deine sehr ausführliche Hilfe. Ich habe es genauso gemacht wie du, aber wenn ich das Script außerhalb des Apachen starte, bekomme ich die Fehlermeldung:
Innerhalb des Apachen gestartet werde ich gefragt, ob ich das Script mit einem Texteditor öffnen will ??
Ich glaube ich lasse es bei der jetzigen Version mit Tkinter. Wenn ein Provider es nicht mögen sollte, daß die Scripte permanent in Asuführung sind (auch wenn sie die meiste Zeit nur warten), kann ich ja einbauen, daß sie nach einer bestimmten Zeit terminieren, um sich dann wieder erneut zu starten . Sparsam im CPU-Verbrauch sind die kleinen Helferlein eh, am meisten Perfomance braucht der LAME und der wird ja wirklich nur gestartet, wenns was zu Kompromieren gibt.
Viele Grüße, Seven
wiedereinmal VIELEN DANK (!) für deine sehr ausführliche Hilfe. Ich habe es genauso gemacht wie du, aber wenn ich das Script außerhalb des Apachen starte, bekomme ich die Fehlermeldung:
Code: Alles auswählen
Traceback (most recent call last):
File "test.py", line 17, in ?
root = Tk()
File "/usr/lib/python2.4/lib-tk/Tkinter.py", line 1569, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
TclError: couldn't connect to display ":0.0
Ich glaube ich lasse es bei der jetzigen Version mit Tkinter. Wenn ein Provider es nicht mögen sollte, daß die Scripte permanent in Asuführung sind (auch wenn sie die meiste Zeit nur warten), kann ich ja einbauen, daß sie nach einer bestimmten Zeit terminieren, um sich dann wieder erneut zu starten . Sparsam im CPU-Verbrauch sind die kleinen Helferlein eh, am meisten Perfomance braucht der LAME und der wird ja wirklich nur gestartet, wenns was zu Kompromieren gibt.
Viele Grüße, Seven