Seite 1 von 2

Problem mit os.py

Verfasst: Donnerstag 14. Februar 2008, 15:37
von Krauzi
Hallo, ich hab ein Problem:
Ich versuche in einem PC Spiel, das auch python unterstützt ein modul einzubinden. Es würde mir schon reichen, wenn das os modul gehen würde, dann könnte ich alle meine gewünschten sachen über eine bat oder exe machen.

Wenn ich jedoch das os einbinden will, kommt diese meldung:
File "mods/reloaded/python\game\os.py", line 128, in ?
raise ImportError, 'no os specific module found'
ImportError: no os specific module found

Ich hab nichts in os.py geändert, habe aber so das gefühl, dass os.py durch das PCspiel (Battlefield 2) durcheinandergebracht wird.

Kann mir jemand helfen?

P.s.: Bitte detailierte anworten geben, ich bin ein python noob.

Verfasst: Donnerstag 14. Februar 2008, 16:28
von Zap
Hallo Krauzi selbst beim Import von os braucht man einige weiter Module die wiederrum von os importiert werden.
Hier die Abhängigkeit die mir ipython angibt. Weiß aber gerade nicht ob der so weit runter geht das alle benötigten Module aufgeführt werden.

Code: Alles auswählen

In [8]: dreload(os)
Reloading os
Reloading nt
Reloading ntpath
Reloading stat
Reloading UserDict
Reloading copy_reg
Reloading types
Reloading _types
Out[8]: <module 'os' from 'C:\Python25\lib\os.pyc'>

Verfasst: Donnerstag 14. Februar 2008, 17:32
von Krauzi
Das man weitere module braucht ist mir bekannt. Ich habe testweise mal alle module aus dem python ordner reingezogen, aber es klappt immer noch nicht. Außerdem würde dann eine andere fehlermeldung kommen. Ich hab so das gefühl, dass kein Betriebsystem erkannt wird, und so die ganzen ifs/elifs die for der o.g. fehlermeldung stehen nicht zutreffen und dann mit dem letzten else die o.g. fehlermeldung ausgegeben wird. Ist es auch möglich - es soll sowieso nur unter windows laufen - einfach als betriebsystem für os.py NT zu setzten?

P.s.: Ich finde die module nt und _types nicht.

Verfasst: Donnerstag 14. Februar 2008, 17:36
von CM
Hoi,

mir fällt gerade auf: Wie versuchst Du eigentlich zu importieren? Im Traceback ist der Pfad mit Slashes und Backslashes gemischt angegeben. Das ist schon mal recht seltsam.
Und dann finde ich noch den Text der Fehlermeldung seltsam. Gut, den kann natürlich wer auch immer hier Python embedded hat überschrieben haben, aber was ist denn mit 'os specific' in dieser Applikation gemeint?

Gruß,
Christian

Verfasst: Donnerstag 14. Februar 2008, 17:41
von Krauzi
Also für micht ist das klar: Er findet kein zutreffendes Betriebsystem. Schau mal in Zeile 127. Das steht ein ELSE:.......
Kann ich einfach das betriebsystem festsetzen?

Verfasst: Donnerstag 14. Februar 2008, 18:03
von CM
Wie wäre etwas Code? Oder meinst Du jeder hat das Spiel installiert? ;-)

Verfasst: Donnerstag 14. Februar 2008, 18:11
von Krauzi
code?
wieso brauchst du den code dazu? Code kann ich nicht liefern, das is nicht opensource. Aber sagt mir jemand doch einfach, wie ich das betriebsystem festlege bzw. wie ich os.system zum laufen kriege. Evtl muss doch einfach nur definiert werden, was bei system zu tun ist.

Verfasst: Donnerstag 14. Februar 2008, 18:28
von CM
Woher weißt Du was in Zeile 127 steht? Stehe ich jetzt auf dem Schlauch und habe was übersehen?

Verfasst: Donnerstag 14. Februar 2008, 18:30
von Krauzi
in os.py steht die im ersten post genannte fehler meldung in zeile 127.
Du kannst auch in zeile 127 springen:
1.) os.py mit Editor (alles windoof) öffnen
2.) STRG+G
3.)127+Enter/Return

Verfasst: Donnerstag 14. Februar 2008, 18:35
von CM
Arrgh. Du meinst das Standard-os-Modul? Da steht in meiner Version in Zeile 127 etwas Anderes. ;-)
Aber ich glaube ich weiß was Du meinst.
Was passiert, wenn Du im Interpreter

Code: Alles auswählen

>>> import sys
>>> sys.builtin_module_names
machst? Was erscheint da?

Und, ganz doof gefragt: Kannst Du os im Interpreter importieren?

Verfasst: Donnerstag 14. Februar 2008, 18:39
von Krauzi
oh shit.
Ich hab in python version 2.3.4 geschaut. Das unterstützt bf2.
aber bf2 hat leider noch nicht das os modul.
Das kommt bei sys.....:
('__builtin__', '__main__', '_ast', '_bisect', '_codecs', '_codecs_cn', '_codecs_hk', '_codecs_iso2022', '_codecs_jp', '_codecs_kr', '_codecs_tw', '_csv', '_functools', '_heapq', '_hotshot', '_locale', '_lsprof', '_md5', '_multibytecodec', '_random', '_sha', '_sha256', '_sha512', '_sre', '_struct', '_subprocess', '_symtable', '_types', '_weakref', '_winreg', 'array', 'audioop', 'binascii', 'cPickle', 'cStringIO', 'cmath', 'collections', 'datetime', 'errno', 'exceptions', 'gc', 'imageop', 'imp', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'operator', 'parser', 'rgbimg', 'signal', 'strop', 'sys', 'thread', 'time', 'xxsubtype', 'zipimport', 'zlib')

Verfasst: Donnerstag 14. Februar 2008, 18:42
von CM
Wie kann Python unterstützt werden, wenn solche Basismodule fehlen?
Das bringt mich zurück zu meiner Frage, weshalb da so ein Mix von Slashes ist. Was passiert da beim Import?

Hat sonst noch jemand dieses Spiel und kann das Problem nachvollziehen?

Verfasst: Donnerstag 14. Februar 2008, 18:45
von CM
Krauzi hat geschrieben:Das kommt bei sys.....:
(... 'nt', ..., 'zlib')
Also daran liegt es nicht! 'nt' ist drin. Es ist also nicht so das die Pythoninstallation irgendwo Murks ist.

Verfasst: Donnerstag 14. Februar 2008, 19:03
von Krauzi
Gibt es noch nen anderen weg, eine externe exe zu starten?

Verfasst: Donnerstag 14. Februar 2008, 19:09
von CM
In 2.3.4? os.popen ... ;-)

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*