例如,我可以做这样的事吗
pythonCode = "print 'hello world'"
pyc = generate_bytecode(pythonCode)
其中pyc将包含pythonCode的字节码?
编辑:我的目标主要是准确地将文件中的.pyc写入变量。幻数,时间戳,代码的十六进制版本以及所有
答案 0 :(得分:3)
将'exec'
作为mode
传递给compile()
将从Python语句生成代码对象。访问代码对象的co_code
属性将为您提供原始字节码。请注意,如果没有其他co_*
属性,单独使用它将无用。
>>> c = compile('print a', '<string>', 'exec')
>>> dir(c)
['__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename', 'co_firstlineno', 'co_flags', 'co_freevars', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize', 'co_varnames']
>>> c.co_code
'e\x00\x00GHd\x00\x00S'
>>> c.co_names
('a',)
>>> c.co_consts
(None,)
>>> dis.dis(c)
1 0 LOAD_NAME 0 (a)
3 PRINT_ITEM
4 PRINT_NEWLINE
5 LOAD_CONST 0 (None)
8 RETURN_VALUE
答案 1 :(得分:2)
它被称为compile
:
>>> compile('print "Hi!"', 'abc', 'single')
<code object <module> at 0000000002555D30, file "abc", line 1>
>>> eval(compile('print "Hi!"', 'abc', 'single'))
Hi!
答案 2 :(得分:1)