Python-Skripte analysieren, welche man NUR ausführen, aber

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
anchelito
User
Beiträge: 5
Registriert: Samstag 9. Februar 2008, 21:08

... nicht ansehen kann.

hallöchen, die Problemstellung klingt zunächst kryptisch, aber ich erklär erst mal. Wir sind gerade am modifizieren des Computerspiels "World in Conflict". Dabei haben wir eine Python-Schnittstelle zum Spiel. Somit können wir durch Python-Skripte das Spiel verändern. Leider haben die Macher nicht alle Skripte mitgeliefert, sondern teilweise nur in die ausführbare Datei gebaked. Das bedeutet: wir können diese zwar ausführen (Funktionen und alles), wissen aber nicht wirklich was da drin ist. Daher benötigen wir eine Möglichkeit diese Module zu analysieren.

So wollen wir z. B.wissen:
- welche Funktionen ein Modul besitzt mit Anzahl der Parameter und am Besten auch noch Namen
- welche Klassen ein Modul besitzt und wie diese aussehen (Funktionen und Klassen- bzw. Instanzvariablen bzw. Properties)
- in diesen Modulen existierende Variablen anschauen (und wenn dies Klasseninstanzen sind, dann auch welche Klassen- bzw Instanzvariablen bzw. Properties diese haben und wie die belegt sind)

wir sind uns klar darüber, dass wir sicherlich nicht die privaten Member anschauen können, aber alles, auf was wir zugreifen können, müssen wir uns auch irgendwie anschauen können.

vielleicht weiß ja jemand wie dies möglich ist. Vielen Dank für die Hilfe.

Grüße,
anchelito
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

anchelito hat geschrieben:- welche Funktionen ein Modul besitzt mit Anzahl der Parameter und am Besten auch noch Namen
- welche Klassen ein Modul besitzt und wie diese aussehen (Funktionen und Klassen- bzw. Instanzvariablen bzw. Properties)
- in diesen Modulen existierende Variablen anschauen (und wenn dies Klasseninstanzen sind, dann auch welche Klassen- bzw Instanzvariablen bzw. Properties diese haben und wie die belegt sind)
Hallo anchelito!

Willkommen im Python-Forum!

Dann lass uns mal ein wenig spielen:

Code: Alles auswählen

>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__egginsert', '__excepthook__', '__name__', '__plen',
 '__stderr__', '__stdin__', '__stdout__', '__wxPythonCleanup', '_current_frames', '
_getframe', 'api_version', 'app', 'argv', 'builtin_module_names', 'byteorder', '
call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'exc_clear', '
exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', '
getcheckinterval', 'getdefaultencoding', 'getfilesystemencoding', 'getrecursionlimit
', 'getrefcount', 'getwindowsversion', 'hexversion', 'maxint', 'maxunicode', '
meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', '
prefix', 'ps1', 'ps2', 'ps3', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 
'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', '
warnoptions', 'winver']
>>> sys.__dict__.keys()
['setrecursionlimit', 'getfilesystemencoding', 'path_importer_cache', 'stdout', 'app
', 'meta_path', 'exc_clear', 'prefix', 'getrefcount', 'byteorder', '__stdin__', '
excepthook', 'ps3', 'ps1', 'exc_type', '__wxPythonCleanup', 'getwindowsversion', '
__excepthook__', 'executable', 'winver', 'copyright', 'builtin_module_names', '
exec_prefix', 'version_info', 'getrecursionlimit', 'path_hooks', '_current_frames', '
platform', 'version', 'exit', 'call_tracing', 'callstats', 'setcheckinterval', '
__doc__', 'api_version', '__egginsert', '__plen', 'getdefaultencoding', '
getcheckinterval', 'maxunicode', 'settrace', 'setprofile', 'argv', '__stdout__', '
__name__', 'subversion', '__stderr__', 'dllhandle', 'displayhook', 'ps2', 'stdin', '
modules', 'warnoptions', 'maxint', '__displayhook__', '_getframe', 'stderr', '
exc_info', 'path', 'hexversion']
>>> sys.setcheckinterval
<built-in function setcheckinterval>
>>> help(sys.setcheckinterval)
Help on built-in function setcheckinterval in module sys:

setcheckinterval(...)
    setcheckinterval(n)
    
    Tell the Python interpreter to check for asynchronous events every
    n instructions.  This also affects how often thread switches occur.

>>>
Genau so wie du ``sys`` analysieren kannst, kannst du das mit den meisten anderen importierbaren Modulen machen.

Bringt dich das ein wenig weiter?

mfg
Gerold
:-)

PS: Wenn du dir wxPython und die zugehörige Demo installierst, dann hast du im Startmenü ein neues Programm: pyCrust

Öffne pyCrust und importiere ein Modul. Und schon kannst du in einem Baum alle Objekte dieses Moduls ansehen.

wxPython für Windows: http://downloads.sourceforge.net/wxpyth ... 1-py25.exe
wxPython-Demo für Windows: http://downloads.sourceforge.net/wxpyth ... .8.7.1.exe

mfg
Gerold
:-)
Zuletzt geändert von gerold am Samstag 9. Februar 2008, 21:32, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
anchelito
User
Beiträge: 5
Registriert: Samstag 9. Februar 2008, 21:08

wow ... das bringt mich schon ein gutes stück weiter ... ich teste das alles mal und dann schau ich, was vlt. noch fehlt.

danke sehr!!!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo anchelito!

Während du antwortetest, erweiterte ich meinen Beitrag um ein paar Zeilen. Dieser Post dient nur dazu, dich darauf aufmerksam zu machen, nicht dass es unbemerkt bleibt.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
anchelito
User
Beiträge: 5
Registriert: Samstag 9. Februar 2008, 21:08

hmm ... die "help"-Funktion scheint es leider nicht zu geben. muss ich dafür irgendwas vorher importieren??? vlt. haben die Entwickler es nicht integriert, aber ich kann es sicherlich irgendwie integrieren.

wxPython wäre bestimmt nützlich, aber leider sind die python-module, die ich analysieren möchte in die exe integriert und nicht als einzelne dateien vorhanden. ich kann sie im spiel importieren, aber nicht außerhalb. daher denke ich nicht, dass das programm mir helfen kann. es sei denn ich kann das programm irgendwie aus python ansprechen.

Danke!

Grüße,
André
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

anchelito hat geschrieben:hmm ... die "help"-Funktion scheint es leider nicht zu geben.
Hallo André!

Vielleicht kannst du ``pydoc`` importieren. Darauf setzt die help-Funktion normalerweise auf.

Code: Alles auswählen

>>> import pydoc
>>> import sys
>>> dir(pydoc)
['Doc', 'ErrorDuringImport', 'HTMLDoc', 'HTMLRepr', 'Helper', 'ModuleScanner', '
Repr', 'Scanner', 'TextDoc', 'TextRepr', '__author__', '__builtin__', '__builtins__
', '__credits__', '__date__', '__doc__', '__file__', '__name__', '__version__', '
_is_some_method', '_re_stripid', '_split_list', 'allmethods', 'apropos', '
classify_class_attrs', 'classname', 'cli', 'cram', 'deque', 'describe', 'doc', '
expandtabs', 'find', 'getdoc', 'getpager', 'gui', 'help', 'html', 'imp', '
importfile', 'inspect', 'isdata', 'ispackage', 'ispath', 'join', 'locate', 'lower',
 'os', 'pager', 'pathdirs', 'pipepager', 'pkgutil', 'plain', 'plainpager', 're', '
replace', 'resolve', 'rfind', 'rstrip', 'safeimport', 'serve', 'source_synopsis', '
split', 'splitdoc', 'strip', 'stripid', 'synopsis', 'sys', 'tempfilepager', 'text',
 'ttypager', 'types', 'visiblename', 'writedoc', 'writedocs']
>>> pydoc.doc(sys.api_version)
Python Library Documentation: int object

class int(object)
 |  int(x[, base]) -> integer
 |  
 |  Convert a string or number to an integer, if possible.
...
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
anchelito
User
Beiträge: 5
Registriert: Samstag 9. Februar 2008, 21:08

danke für den tipp mit pydoc.

leider war pydoc nicht vorhanden in dem spiel, daher hab ich einfach mal den ganzen python-lib-ordner kopiert und dem sys-path hinzugefügt, sodass ich pydoc importieren kann.

ich kann die pydoc.doc ausführen, bekomme dabei aber leider diesen fehler:

Bild

irgendwelche ideen?

vielen Dank!!

[Edit] vlt. hat es etwas mit der python-version des spiels zu tun (2.41) ... ich suche mal nach dieser version und teste es dann
anchelito
User
Beiträge: 5
Registriert: Samstag 9. Februar 2008, 21:08

problem gelöst: lag an der version!! danke
Antworten