geparste php-datei in (capisuite) python-script benutzen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
philio
User
Beiträge: 4
Registriert: Freitag 25. April 2008, 20:37

Ich habe so gut wie gar keine Ahnung von Python und habe leider nicht genug Zeit um mich so eingehend damit zu beschäftigen dass ich diese vermutlich recht leichte Frage selbst beantworten zu können. Tut mir leid, wenn sich deswegen irgendwer hier im Forum von einem "Nichts-Könner" belästigt fühlt!

Also:
Kann man eine geparste php-Datei in einem python-Script "benutzen"? Im konkreten Fall geht es darum eine Konfigurations-Datei der CapiSuite (ein Fax/Anrufbeantworter-Programm für Linux in python geschrieben) mit php vor/während dem Einbinden gestalten zu können. Die Idee:
Anruf kommt -> CapiSuite reagiert und lädt die Datei answering_machine.conf (in der steht, was mit dem Anruf geschehen soll) -> jetzt soll aber answering_machine.php geladen werden in der Anweisungen stehen wie zum -Zeitpunkt- des Anrufs die Konfiguration aussehen soll.

Laufen soll das ganze auf einem ubuntu 7.10-System, python und php installiert.
Ich hoffe die Frage ist verständlich gestellt und irgendwer kann mir da weiterhelfen.
BlackJack

Also zumindest mir ist nicht so ganz klar wie die Problemstellung aussieht. Was verstehst Du unter einer "geparsten PHP-Datei"? Kannst Du Beispiele geben?
philio
User
Beiträge: 4
Registriert: Freitag 25. April 2008, 20:37

Also, in einer "Programm-Datei" der CapiSuite wird eine Konfigurations-Datei geladen: configfile_voice="/etc/capisuite/answering_machine.conf". Jetzt hätte ich aber gern, dass statt dessen an dieser Stelle die Datei answering_machine.php geladen wird. In *.conf-Datei steht z.B.
delay="20"
was dem Programm sagt, dass es 20 Sekunden warten soll bevor der Anrufbeantworter gestartet wird. Jetzt hätte ich gern, dass ich an dieser Stelle
<?php
if(Anrufzeitpunkt im Zeitinterval-A)
{ delay="5" }
else
{ delay="30" }
?>
schreiben kann.

Einfach nur einbinden ala configfile_voice="/etc/capisuite/answering_machine.php" funktioniert nicht. Das habe ich schon ausprobiert. Die Datei selbst lässt sich über die Konsole ausführen, also das parsen selbst klappt an sich (mittles "$ php answering_machine.php"). Ich muss halt nur dem python-Script sagen, dass es die Datei auch ausführen soll, nicht nur als "Plain-Text" einfügen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ausführen und stdout auslesen geht mit subprocess, dazu gibt es im Forum viele Beispiele.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
philio
User
Beiträge: 4
Registriert: Freitag 25. April 2008, 20:37

Ok, vielen Dank dafür erstmal!
Ich hab hier mal im Forum ein wenig geschaut, aber um ehrlich zu sein sagen mir Snippets wie

Code: Alles auswählen

import subprocess

pipe = subprocess.Popen('C:\php.exe C:\test.php', shell=True, stdout=subprocess.PIPE).stdout
print pipe.read()
nicht viel. Wie müsste so eine Pipe denn aussehen, wenn ich die Ausgabe (echo) von ./konfiguration.php in die Variable "configfile_voice" laden möchte (was ja configfile_voice="./Konfiguration.conf" entsprechen müsste)?[/quote][/code]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich weiß nicht genau wo da dein Problem ist

Code: Alles auswählen

import subprocess

pipe = subprocess.Popen(['konfiguration.php'], shell=False, stdout=subprocess.PIPE).stdout
configfile_voice = pipe.read()
(ungetestet, müsst aber so gehen vorrausgesetzt die Datei ist ausführbar).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
philio
User
Beiträge: 4
Registriert: Freitag 25. April 2008, 20:37

Nein, das funktioniert leider auch nicht. Aber hey, ich weiß wenigstens schon mal warum ;-)

Durch diese Anweisung wird ja die Ausgabe (echo) des konfiguration.php-Scripts in die Variable configfile_voice geschrieben, nicht nur der Pfad und Dateiname. Weiter unten im Python-Script wird dann erst der Dateiinhalt ausgelesen und ausgewertet:

Code: Alles auswählen

def readConfig(file=""):
        import ConfigParser
        config=ConfigParser.ConfigParser()
        if (file==""):
                config.readfp(open(configfile_fax))
                config.readfp(open(configfile_voice))
        else:
                config.readfp(open(file))
        for s in config.sections():
                for o in config.options(s):
                        value=config.get(s,o)
                        if (len(value)>1 and value[0]=='"'):
                                config.set(s,o,value[1:-1])
        if (not config.has_section('GLOBAL')):
                raise IOError("invalid config file, section GLOBAL missing")
        return config
Wie kann ich in dieser Funktion das Auslesen der config_voice umgehen und pipe.read() an der richtige Stelle hinzufügen?
Antworten