Habe mich hier wohl nicht deutlich genug ausgedrückt. Sorrydieter1a hat geschrieben:Ich bräuchte erstmal keinen Browseraufruf, sondern einfach die Anfrage an einen URL, sprich xyz.php und natürlich die Rückgabe.
Geht sowas?
Gibts dafür Beispiele oder Tutorials?
Wäre ja auch eine Lösung des Zwischenspeicherns von Vectordaten ohne Inanspruchname von Game Engine belastenden Methoden.
Mit Python in Speicher schreiben?
- dieter1a
- User
- Beiträge: 75
- Registriert: Montag 26. Februar 2007, 13:08
- Wohnort: Bad Rothenfelde
- Kontaktdaten:
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Stellen wir mal das Grunddesign fest (damit es auch für nicht-Blender-User wie mich klar ist).
- Du hast eine Blender-Anwendung die Daten zwischenspeichern muss.
- Du kannst aus Blender heraus Python nutzen.
- Du möchtest nicht in Textdateien zwischenspeichern, weil das zu langsam ist und zu viel Disk-IO hervorruft.
- Also kannst du einen anderen Python-Prozess starten, der die Daten bereit hält und der per XML-RPC die Daten an den Python-Prozess aus Blender zurückgibt
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- dieter1a
- User
- Beiträge: 75
- Registriert: Montag 26. Februar 2007, 13:08
- Wohnort: Bad Rothenfelde
- Kontaktdaten:
Richtig.Leonidas hat geschrieben:
- Du hast eine Blender-Anwendung die Daten zwischenspeichern muss.
Richtig.Leonidas hat geschrieben:
- Du kannst aus Blender heraus Python nutzen.
Richtig.Leonidas hat geschrieben:
- Du möchtest nicht in Textdateien zwischenspeichern, weil das zu langsam ist und zu viel Disk-IO hervorruft.
Genau das weiß ich nicht.Leonidas hat geschrieben:
- Also kannst du einen anderen Python-Prozess starten, der die Daten bereit hält und der per XML-RPC die Daten an den Python-Prozess aus Blender zurückgibt
Python ist die Script-Sprache in Blender, mit der sich das gesamte Verhalten der Echtzeit-Animation steuern lässt.
Wie ich nun einen URL anspreche und Daten zurück bekomme weiß ich nicht.
Darum habe ich auch den Weg über ein Director-Movie gewählt, welches in der Lage ist einen Server im Netz über einen URL anzusprechen, Rückgabewerte in eine .txt zu schreiben und die Animation ist in der Lage diese .txt zu lesen und sie zu beschreiben.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Na also! Wenn das alles ist:dieter1a hat geschrieben:Wie ich nun einen URL anspreche und Daten zurück bekomme weiß ich nicht.
Code: Alles auswählen
import urllib
remote_file = urllib.urlopen('http://dein.server.vielleicht.mit.sinnloser.berlin/tld/und.deiner.datei.txt')
remote_file_contents = remote_file.read()
remote_file.close()
(Was das ``with``-Statement angeht muss ich ehrlich sagen, dass es zwar einiges bietet, aber nicht wirklich elegant ausschaut).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- dieter1a
- User
- Beiträge: 75
- Registriert: Montag 26. Februar 2007, 13:08
- Wohnort: Bad Rothenfelde
- Kontaktdaten:
Ich bin erstaunt, platt und sehr dankbar Leonidas.
Werde mich gleich morgen damit auseinander setzen und testen was dabei heraus kommt.
Wenn`s Fragen gibt, darf ich mich doch wieder hier melden?
Vielen Dank
dieter1a
Werde mich gleich morgen damit auseinander setzen und testen was dabei heraus kommt.
Wenn`s Fragen gibt, darf ich mich doch wieder hier melden?
Vielen Dank
dieter1a
@Leonidas: Danke für den Code-Hinweis. Werde ich bald auf der Seite entsprechend ändern.
Viele Grüße
Viele Grüße
- dieter1a
- User
- Beiträge: 75
- Registriert: Montag 26. Februar 2007, 13:08
- Wohnort: Bad Rothenfelde
- Kontaktdaten:
Die Verbindung klappt soweit.Leonidas hat geschrieben:Code: Alles auswählen
import urllib remote_file = urllib.urlopen('http://dein.server.vielleicht.mit.sinnloser.berlin/tld/und.deiner.datei.txt') remote_file_contents = remote_file.read() remote_file.close()
Der Server liefert mir eine Integer-Variable mit Namen ex.
Jetzt möchte ich natürlich diese Variable extraieren und auswerten.
Wie komme ich an diese Variable?
Das php Script lefert mir mit: echo "ex{".$exist."}ex"; den Integer.
Für ein Code_Schnipsel wäre ich sehr dankbar, weil ich noch lange nicht "der Pythonfachmann" bin.
Vielleicht solltest Du mal das Python-Tutorial durcharbeiten.
Und verraten was "Der Server liefert mir eine Integer-Variable mit Namen ex." bedeutet. Der Server liefert Dir eine Zeichenkette. Wie sieht die aus?
Und verraten was "Der Server liefert mir eine Integer-Variable mit Namen ex." bedeutet. Der Server liefert Dir eine Zeichenkette. Wie sieht die aus?
- dieter1a
- User
- Beiträge: 75
- Registriert: Montag 26. Februar 2007, 13:08
- Wohnort: Bad Rothenfelde
- Kontaktdaten:
Die php-Seite liefer mir keine Zeichenkette, sondern Variablen in denen Datenbankinhalte verpackt sind.
In diesem Fall wird nur die Verbindung zum Server getestet.
Hat die Variable nicht einen bestimmten Wert, sagen wir mal 10, ist die Verbindung zum Server fehlgeschlagen.
Da in der Datenbank auch Vektoren, jede Menge Text, Floatwerte usw gespeichert sind, wäre es doch quatsch mir Zeichenketten liefern zu lassen.
Oder?
In diesem Fall wird nur die Verbindung zum Server getestet.
Hat die Variable nicht einen bestimmten Wert, sagen wir mal 10, ist die Verbindung zum Server fehlgeschlagen.
Da in der Datenbank auch Vektoren, jede Menge Text, Floatwerte usw gespeichert sind, wäre es doch quatsch mir Zeichenketten liefern zu lassen.
Oder?
Also irgendwo besteht hier ein Missverständnis. Ich dachte Du holst aus einem Python-Skript heraus Daten per `urllib`!? Da werden Bytes übertragen, d.h. eine Folge oder Kette von Bytes, die in Python mit dem Datentyp `str` also als Zeichenkette verarbeitet werden.
- dieter1a
- User
- Beiträge: 75
- Registriert: Montag 26. Februar 2007, 13:08
- Wohnort: Bad Rothenfelde
- Kontaktdaten:
Ich sende an die .php auf dem Server Variablen mit unterschiedlichen Inhalten. Das können schonmal bis zu 10 Variablen sein, die dann im php-Script je nach Name der Variablen ausgewertet werden und die Datenbank wird mit den Inhalten gefüttert.
Das gleiche passiert bei einer Datenbankabfrage, nur erwarte ich dann ebenfalls bis zu 10 Variablen die mir eine .php zurückliefert und die ich in der Animation mit Python auswerte.
Ich frage doch nicht die Datenbank 10 mal hintereinander nach Datenbankeinträgen der unterschiedlichsten Spalten ab.
Ich hoffe mich verständlich genug ausdrücken zu können.
Das gleiche passiert bei einer Datenbankabfrage, nur erwarte ich dann ebenfalls bis zu 10 Variablen die mir eine .php zurückliefert und die ich in der Animation mit Python auswerte.
Ich frage doch nicht die Datenbank 10 mal hintereinander nach Datenbankeinträgen der unterschiedlichsten Spalten ab.
Ich hoffe mich verständlich genug ausdrücken zu können.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Die Sache ist die, dass die PHP-Seite *immer* Strings rausgibt. Jede PHP-Seite, egal was sie anzeigt.dieter1a hat geschrieben:Das gleiche passiert bei einer Datenbankabfrage, nur erwarte ich dann ebenfalls bis zu 10 Variablen die mir eine .php zurückliefert und die ich in der Animation mit Python auswerte.
Dieser String wird im meinem Beispiel nun in ``remote_file_contents`` gespeichert und du kannst ihn beispielsweise mit ``print`` anzeigen lassen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- dieter1a
- User
- Beiträge: 75
- Registriert: Montag 26. Februar 2007, 13:08
- Wohnort: Bad Rothenfelde
- Kontaktdaten:
Ja, Leonidas,
ich war so dumm und hatte mir die remote_file anzeigen lassen.
Sorry.
jetzt bekomme ich genau das, was mir die .php liefert.
Nämlich ex{10}ex.
Jetzt kann ich den Inhalt der Variablen $exist durch herausfiltern des String's zwischen {} weiterverarbeiten.
Es klappt hervorragend und ich bedanke mich vielmals für die tolle Hilfe
Mit freundlichen Grüßen
dieter1a
ich war so dumm und hatte mir die remote_file anzeigen lassen.
Sorry.
jetzt bekomme ich genau das, was mir die .php liefert.
Nämlich ex{10}ex.
Jetzt kann ich den Inhalt der Variablen $exist durch herausfiltern des String's zwischen {} weiterverarbeiten.
Es klappt hervorragend und ich bedanke mich vielmals für die tolle Hilfe
Mit freundlichen Grüßen
dieter1a
- dieter1a
- User
- Beiträge: 75
- Registriert: Montag 26. Februar 2007, 13:08
- Wohnort: Bad Rothenfelde
- Kontaktdaten:
Nachdem nun alles eigentlich perfekt funktioniert, hat sich ein neues Problem ergeben.
Weil Blender ja seine eigenen Module mitliefert, brauchte auf dem Rechner auf dem die Animation.exe gestartet wurde, kein Python installiert sein.
Das hat sich seit der Verwendung von urllib und re geändert, was auch nicht weiter tragisch ist.
Jetzt stellt sich mir die Frage, ist es möglich entweder vor dem Download der Animation oder vor dem ersten Start der Animation herauszufinden ob Python installiert ist, um dann gegebenenfalls eine Installation einzuleiten?
Edit:
Kann man eventuell das Importieren von os mit try: except: so abfangen, dass keine Ausgabe im shell-Fenster erscheint wenn os nicht da ist?
Ohne Python-Installation kann ich nämlich aus einer Blender-Animation.exe heraus nicht auf das Modul os zu greifen.
Wird aber auf Grund eines Fehlers eine Konsolenausgabe veranlasst, hängt Python in der Animation, weil es keine Konsole gibt.
Wenn so etwas gehen würde, könnte man damit eine Installation einleiten.
Ich habe aber keinen Plan wie man so etwas hin kriegt.
Weil Blender ja seine eigenen Module mitliefert, brauchte auf dem Rechner auf dem die Animation.exe gestartet wurde, kein Python installiert sein.
Das hat sich seit der Verwendung von urllib und re geändert, was auch nicht weiter tragisch ist.
Jetzt stellt sich mir die Frage, ist es möglich entweder vor dem Download der Animation oder vor dem ersten Start der Animation herauszufinden ob Python installiert ist, um dann gegebenenfalls eine Installation einzuleiten?
Edit:
Kann man eventuell das Importieren von os mit try: except: so abfangen, dass keine Ausgabe im shell-Fenster erscheint wenn os nicht da ist?
Ohne Python-Installation kann ich nämlich aus einer Blender-Animation.exe heraus nicht auf das Modul os zu greifen.
Wird aber auf Grund eines Fehlers eine Konsolenausgabe veranlasst, hängt Python in der Animation, weil es keine Konsole gibt.
Wenn so etwas gehen würde, könnte man damit eine Installation einleiten.
Ich habe aber keinen Plan wie man so etwas hin kriegt.
- dieter1a
- User
- Beiträge: 75
- Registriert: Montag 26. Februar 2007, 13:08
- Wohnort: Bad Rothenfelde
- Kontaktdaten:
Es ging leichter als ich dachte.
Das klappt wunderbar ohne Shell Fensterausgabe.
Gruß
dieter1a
Code: Alles auswählen
try:
import os
except:
tue etwas anderes
Gruß
dieter1a
Du solltest aber immer konkrete Ausnahmen behandeln und nicht einfach *alle*. In diesem Fall interessiert Dich ein `ImportError`:
Code: Alles auswählen
try:
import os
except ImportError:
# tue etwas anderes