Blender Python Fehlermeldung

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Ups,
kann man da nicht irgendwas machen, das der Standard-Browser aufgerufen wird?
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

*hust* ...

Code: Alles auswählen

import webbrowser

webbrower.open('http://www.python-forum.de')
;)

Aber so entstand ja dieser Thread *g*, das funktionierte bei Dir ja nicht.

Das Problem könnte "eventuell" beim Umfang des Pythons von Blender auch sein. Je nachdem wie os.startfile() dort tatsächlich realisiert ist.

Deine ursprüngliche Fehlermeldung:

Code: Alles auswählen

[Errno 2] Das System kann die angegebene Datei nicht finden:
'http://www.3dpowertower.de'
lässt fast schon eher vermuten, als würde der URL-String mittels .startfile nativ und platt auf das Dateisystem geschossen. Das das natürlich dann nicht funkioniert ist klar.

Wenn aber die Windows Ebene, die für gelinkte Anwendungen zuständig ist, erkennt dass hinter dem Aufruf eigentlich eine Website steht (z.B erkannt durch die typischen Merkmale 'http', 'https', 'www', etc.), nicht übergangen wird, sowie richtig eingestellt ist, so müsste es funktionieren.

Soviel leider aber zur Theorie ... es scheint nicht immer wie erwartet zu funktionieren.
Zuletzt geändert von Masaru am Dienstag 27. Februar 2007, 19:59, insgesamt 2-mal geändert.
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Pardon :oops:
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Wenn ich das Gleiche mit Opera mache klappts auch.
Mache ich das aber mit Fire Fox klappts seltsamerweise nicht.
Warum ist das so?
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Kommt drauf an ... wenn folgende Fehlermeldung kommt: OSError: [Errno 22] Invalid argument

... dann "kann" es daran liegen, dass der Pfad zur "firefox.exe" eigentlich ein wenig explosiv angegeben ist. Bei mir war es jedenfalls so.

Er enthält escape Zeichen (\), welche besser richtig (\\) angegeben werden sollten.

So wird z.B. aus dem: \f
vorn: ... \firefox.exe
welches Steuerungszeichen für Formfeed steht, ein sehr kryptisches Gebilde, weshalb im Dateisystem mittels diesem natürlich die Datei nicht mehr auffindbar ist.

Am besten mal ein: r
vor den String mit dem gesamten Verzeichnispfad schreiben, dann wird daraus automatisch ein raw_string string, mit konvertierten escape zeichen gemacht.

Z.B.: os.spawnl(os.P_NOWAIT, r"D:\_PROGRAMME_\Mozilla Firefox\firefox.exe", "firefox.exe", "http://www.python-forum.de")
Zuletzt geändert von Masaru am Dienstag 27. Februar 2007, 20:47, insgesamt 1-mal geändert.
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Oha.
Das klappt.
Da kann man dann immer noch mit leben, daß man eine Installation von Fx in C:\Programme\ voraussetzt, damit der 3D-Raum gestartet werden kann.
Außerdem konnte man ja 3 verschiedene RAR.exe anbieten.
Fire Fox, Opera und Netzcape.
Das wär doch immer noch besser als die Installation eines ActiveX zu fordern oder?

Danke dieter1a
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Hmm ... Gegenfrage ... in der Zeit der Trojaner, Viren und Würmer .. würde ein Benutzer eher eine Executable oder ein ActiveX (welches der Browser vorschlägt) installieren?

*schulterzuck*

Ich würde weder das eine noch das andere tun *g*.
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Das wäre auch nur der Einfachheithalber vorzuschlagen.
Man könnte auch den Downlos eines ganzen Ordners vorschlagen, den man dann einfach nach c:\ kopiert
Aber nicht jeder kann das möglicherweise.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Wenn ich mir Blender so anschaue ... dann fällt mir spontan auf, dass das Ding ja unter verschiedenen Platformen auch läuft.

Am idealsten wäre etwas, was nicht rein auf Windows beschränkt ist.
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Man kann natürlich für alle Platformen eine ausführbare anbieten.
Aber auf den Rechner müssen erstmal alle.
Die Datei ist zu groß, um sie übers Netz auszuführen.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Ich meine damit auch eher, dass Du bei den pythonischen Komponenten eher dafür schon sorgen solltest, dass es Plattformübergreifend bleibt.

Z.B. könntest Du:
- plattform übergreifendes Verhalten implementieren (etwa wie Wrapper Klassen, Case-Unterscheidungen, etc.)
- die Pfade zu den Browsern konfigurierbar halten
- gestufte webbrowser-Aufrufversuche (z.B. erst mit webbrowser.open, dabei OSError catchen, und dann vielleicht eine eigene Strategie ausprobieren)
- etc. etc.

Was ich nicht machen würde, ist hart den Pfad zu den Browser hinneincodieren.

Gemeiner könnte man sich nicht selber in eine Sackgrasse bringen ;).
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Aber was nützt mir der gute Wille wenn das 'webbrowser.open()' nicht geht?
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Das Komponenten immer mal nicht funktionieren (gerade bei einer interpretierten Sprache wie Python) kann immer vorkommen.

Vielleicht funktioniert ja "webbrowser.open" (genauer, os.startfile, falls man auf einer Windows Kiste ist) lediglich auf Deinem System nur nicht.

Bei dem mitglieferten Python-Package in Blender sieht es für mich nach einem Py2Exe oder PyInstaller Bundle Zip-Bundle mit Interpreter-DLL aus (in der aktuellen Version ist es Python24).

Folglich ... kann es sein, dass der Fehler auch dort liegen könnte.

Wenn man das rausbekommt, und Dein System komplett ausschließen kann, könnte man soetwas patchen (oder es der Blender-Development Community mitteilen, sowie dann auch einen baldigen Patch warten).

Aber ... wer wartet schon gerne ;)? Also bleibt einem noch die Möglichkeit sich eine entsprechende Umgebung aufzubauen, die möglichst so viele Ziele abdecken kann wie möglich. Dabei muss natürlich Nutzen und Aufwand gegeneinader immer abgewogen werden.

Wenn ich als Entwickler für eine breit gefächerte Menge an Kunden tätig bin, zu denen ich (im Gegensatz wie bei einem Projekt) keinen direkt Kontakt habe ... dann gehe ich dabei immer so sicher, skalierbar und transparent wie ich es als Kunde erwarten würde vor.

Und ich als Kunde - eventuell sogar aus der Blender Community - würde weder erwarten, dass ich bei dem Background eine Windowskiste nutzen, noch explizit den Internet Explorer an einem fest vorgebenen Platz plaziert haben muss.
Zuletzt geändert von Masaru am Dienstag 27. Februar 2007, 23:05, insgesamt 1-mal geändert.
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Ich muß das Ganze auf einer Kiste lauffähig machen, auf der kein Python installiert ist.
Ich muß mit dem auskommen was das Blenderprojekt drauf oder drin hat.
Ich kann von niemanden erwarten, daß er sich erst Python installiert, die Pfade setzt und womöglich noch eine Umgebungsvariable eingibt nur weil er sich in einem 3D-Raum umsehen möchte.
So wünschenswert das auch wäre, daß sich die Leute mit Python beschäftigen.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Meine ich auch alles gar nicht.
Denn das eine schließt dann andere nicht aus.

Was ich aber meine ist, dass ein hartes setzen der Executable-Pfade zum Internet Explorer mit das schlimmste wäre, was man tun könnte.

Weil wenn dann beim Zielrechner der Explorer doch wo anders liegt ... dann "muss" sich plötzlich der Benutzer mit Python und Python Programmieren auseinander setzen.

Anstelle vielleicht einfach nur eventuell in einer flexibel konfigurierbaren INI-File diesen Pfad mit dem mitglieferten Editor des Betriebssystems (Notepad für Windows, etc.) zu editieren ... hat dann der Benutzer den Aufwand, den man als Entwickler gehabt hätte.

Da stellt sich dann wieder die Frage, ähnlich der Evaluierung zwischen ActiveX und einem Executale: Was ist besser ... das eine oder das andere?

Und ich würde die z.B über eine Datei oder parametrisierbaren Aufruf konfigurierbare Variante vorziehen :D.

Letztendlich ist es aber Dein Code ;), hier kann Dir nur ein jeder seine eigenen Ideen, Kritiken, Anmerkungen und Zustimmungen geben. Was Du letztendlich daraus machst, bleibt wie immer nicht uns überlassen *g*.
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Das hört sich für mich alles ziehmlich kompliziert an.
Meinst Du grob gesagt das Ganze mit einem Installer auf die Kiste packen?
Außerdem würde ich freiwillig nicht den Pfad zum IE vorgeben. Lieber erwarte ich die Installation eines Browsers den man sich mit IE holen könnte. ( Dafür soll IE ja ganz gut sein).
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Bevor man an den Installer gehen würde, muss man erst einmal sein Python Konstrukt konfigurierbar gestaltet bekommen.

Das hat auch wenig damit zu tun, sich darauf zu beruhen, der Installer würde schon alles machen.

Denn auch ein Installer kann nicht zaubern. Er "könnte" vielleicht den Pfad zum Browser ermitteln (oder von Benutzer via FileBrowser Element), jedoch findet sie dadurch immer noch nicht ihren weg automatisch in das Python Script und in die Strings für die BrowserPfade :roll: .

Bekommt man eine solche Konfigurierbarkeit manuell hin, kann man im Anschluss immer noch versuchen es noch ein wenig optimierter (dem Benutzer die Arbeit und den Gehirnschmaz abnehmen, würde ich es wohl eher nennen) in einen Installerprozess kleiden.

Eine einfache Methode (die man aber erst mit Blender und dessen Python Pakets testen müsste) wäre eine Datei vorzugeben, in der lediglich der Pfad zu webbrowser zu stehen hat.

Wenn man es mit BlenderPython kann, würde man diese dann öffnen, auslesen, und den Wert als Variable für den Aufruf verwenden.
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Gute Idee.
Muß ich mal ausprobieren ob ich über die GameLogik dateien editieren, oder zumindestens lesen kann.
Blender besteht ja aus 2 Teilen. Da ist zum Einen die Game Engine und zum Anderen Blender und seine Module.
Mit from Blender import * oder so ähnlich komme ich an die Module zum editieren von Dateien heran. Aber das wird nicht mit in die Runtime übernommen.
Wenn ich mich da schlauer gemacht habe schreibe ich Dir, was machbar ist.
Benutzeravatar
dieter1a
User
Beiträge: 75
Registriert: Montag 26. Februar 2007, 13:08
Wohnort: Bad Rothenfelde
Kontaktdaten:

Mir ist da so eine Idee gekommen.
Da ich ja für meinen Chat und fürs Gästebuch einen Homeserver laufen habe, stehen mir ja für die Downloadgeschichte alle Türen offen.
Sowohl mit Python als auch mit PHP hätte ich quasi alle Möglichkeiten jedem die richtige Installation anzubieten.
Ich weiß zwar im Moment noch keinen konkreten Weg, aber den gibt's bestimmt.
Aber das ist, glaube ich, der sekundäre Teil meiner Arbeit, weil ich erstmal sehen muß mit welcher Blenderversion mein Tower noch lauffähig ist, weil in der Version, mit der er erstellt ist, kein Zugriff auf das os Modul möglich ist. Eine höhere Version wäre nicht für das ActiveX geeignet gewesen.
Wenn ich den Tower komplett neu schreiben muß, dreht sich mir schon jetzt der Magen um.
Aber besser ein Ende mit Schrecken, als ein Schrecken ohne Ende.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Blender bringt seinen eigenen Python-Interpreter mit und natuerlich die Blender-Python-Module. Es bringt keine Python-Standard-Library mit, um die zu benutzen, benoetigt man eine Python-Installation.

Um festzustellen, ob das Problem bei Blender liegt oder nicht, kann man natuerlich die ganzen Befehle einfach mal direkt in der Python-Shell eingeben.
Antworten