Найдите то, что находится в файле PYC - PullRequest
4 голосов
/ 17 августа 2010

Это могут быть вопросы новичка, но ...

Итак, у меня есть pyc-файл, который мне нужно использовать, но у меня нет документации по нему. Есть ли способ узнать, какие классы и функции в нем и какие переменные они принимают? Мне не нужно кодировать, просто как его запустить.

Спасибо

Ответы [ 4 ]

9 голосов
/ 17 августа 2010

Пока вы можете импортировать файл, вы можете проверить его;не имеет значения, идет ли он от .py или .pyc.

>>> import getopt
>>> dir(getopt)
['GetoptError', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'do_longs', 'do_shorts', 'error', 'getopt', 'gnu_getopt', 'long_has_args', 'os', 'short_has_arg']
>>> type(getopt.getopt)
<type 'function'>
>>> inspect.getargspec(getopt.getopt)
ArgSpec(args=['args', 'shortopts', 'longopts'], varargs=None, keywords=None, defaults=([],))
>>> help(getopt.getopt)
Help on function getopt in module getopt:
...
4 голосов
/ 17 августа 2010

если вы прикрепите его к пути импорта и импортируете по имени, вы можете использовать dir

import foo
dir(foo)

Вы также можете использовать `help '

help(foo)

чтобы получить строку документации. Оба из них могут быть использованы для всего, что содержит foo. Обратите внимание, что байт-код меняется между выпусками, поэтому он может работать или не работать для вашей версии python. Если это так, лучшее, что я могу сказать, - это попробовать разные версии, пока одна из них не заработает.


Если вам нужно восстановить аргументы для функции, вы сначала получите argcount

argcount = f.func_code.co_argcount

Аргументы - это первые переменные argcount из

f.func_code.co_varnames

Это не говорит вам, что функция ожидает от них, и действительно полезно, только если у нее нет строки документации, но это можно сделать.

1 голос
/ 17 августа 2010

Самый простой способ http://depython.com

0 голосов
/ 17 августа 2010

Если в самом коде есть строки документации, и он не был создан с оптимизацией, которая удаляет строки документации, вы можете импортировать модуль и просмотреть:

для foo.pyc

import foo
dir(foo)
help(foo)

Если вы решите, что вам нужен код, есть декомпиляция .

...