Seite 1 von 2

Verfasst: Donnerstag 14. Februar 2008, 19:11
von CM
In 2.3.4? os.popen ... ;-)
Sorry, aber eine Idee habe ich noch: Was steht in dem \game-Ordner ?

Verfasst: Donnerstag 14. Februar 2008, 19:15
von Krauzi
Hm. ok. Aber das hilft mir auch nicht direkt weiter. Ich muss einfach noch weitere module in BF2 importieren. Aber meistens brauchen die Module das os modul xD. Und da kommt das hier:
File "mods/reloaded/python\game\test.py", line 3, in ?
import zipfile
File "mods/reloaded/python\game\zipfile.py", line 3, in ?
import struct, os, time
File "mods/reloaded/python\game\os.py", line 25, in ?
_names = sys.builtin_module_names
NameError: name 'sys' is not defined.

Ich hab hier mal testweise zipfile.py importiert (import zipfile).
Aber zur ersten frage: Wie definier ich das betriebsystem??

Verfasst: Donnerstag 14. Februar 2008, 19:19
von CM
Nochmal zur ersten Frage: Wieso steht da z. B. "mods/reloaded/python\game\zipfile.py"? Wieso setzt sich der Pfad so zusammen? Auf Windows müßte es doch *nur* '\' geben, oder?

edit: Nur damit Du weißt, das ich Deine Frage nicht ignoriere: Es gilt nicht das Betriebssystem zu ermitteln, sondern Python in die Lage zu versetzen das selbstständig zu tun.

Verfasst: Donnerstag 14. Februar 2008, 19:36
von Krauzi
Ich weis auch nicht wieso der BF2 debugger das mit / und \ schreibt. Aber auf jedenfall klappt es. Aber ich muss die Betriebsystem abfrage abstellen. Sonst geht da überhaupt nix. os.py muss/soll das betriebssystem nicht abfrage. Das betriebsystem ist immer (IMMER) "nt" (XP/2000). Er soll einfach nur os.system ("exe.exe") ausführen. Ginge es eigentlich noch einfacher, wenn ich nur os.system definiere (leider ka wie).

P.s.: @ CM das du meine frage nicht ignorierst, merke ich an deinen super schnellen und zahlreichen antworten :-)

Verfasst: Donnerstag 14. Februar 2008, 20:06
von CM
*duck* Kann man os.py etc. einfach in das \games-Directory kopieren?*duck*

Verfasst: Donnerstag 14. Februar 2008, 20:12
von Krauzi
hab ich schon gemacht. Aber dann kommt die fehler meldung, die ich im ersten post geschrieben hab. Er erkennt einfach das betriebsystem nicht. Am einfachsten währe es, wenn ich os.sytstem definieren würde. Kann mir hier einer helfen?

Verfasst: Donnerstag 14. Februar 2008, 21:07
von Leonidas
Du kannst "os.system" nicht definieren, da es eine Funktion des os-Moduls ist. D.h. du musst die Funktion also reimplementieren. Und das ist nichttrivial, dazu könntest du ctypes verwenden um die Win32 API-Funktion CreateProcess aufzurufen.

Verfasst: Freitag 15. Februar 2008, 06:28
von Zap
Also Battlefield 2 hab ich nicht, sondern BF2142. Dort liegt im root Verzeichnis ein Zip File mit dem Namen pylib2.3.4.zip in diesem File finde ich unter anderem auch das os-modul. Ist das bei BF2 auch so aufgebaut?
Hast du auch ein solches File?
Ich hab nun keine Ahnung (und auch nicht das große Interesse) wie man mit dem eingebauten Pythoninterpreter von BF rumspielen kann um zu testen ob das hier geht.
Ich denke mal das es ansonsten ne gute Idee wäre in der BF2 Community rumzuhorchen. Kann mir kaum vorstellen das nicht schonmal irgendwelche Modder erweiterte Funktionalität eingebaut haben.

Verfasst: Freitag 15. Februar 2008, 14:54
von Krauzi
pylib2.3.4.zip -> richtig. Ich hätte nie daran gedacht. Ich teste jetzt mal ob es geht. (Bf2142 ist eigentlich nur ein gemodetes bf2xD)

THXTHXTHX Für den tip.....
MfG Krauzi

EDIT: Ich hab jetzt mal das module zipfile importiert. Da kommt immer dieser fehler:
File "mods/reloaded/python\game\test.py", line 1, in ?
import zipfile
File "pylib-2.3.4.zip\zipfile.py", line 4, in ?
ImportError: No module named binascii

Edit2: Wenn ich os.py in die lib.zip von BF2 kopier, kommt immer :
'module' object has no attribute 'system'

Verfasst: Sonntag 17. Februar 2008, 16:50
von Krauzi
Kann keiner helfen?