是否有一个python函数来生成python代码字符串的字节代码?

时间:2013-11-28 04:23:47

标签: python bytecode built-in bytecode-manipulation

例如,我可以做这样的事吗

pythonCode = "print 'hello world'"
pyc = generate_bytecode(pythonCode)

其中pyc将包含pythonCode的字节码?

编辑:我的目标主要是准确地将文件中的.pyc写入变量。幻数,时间戳,代码的十六进制版本以及所有

3 个答案:

答案 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)

使用compiler包:

  
    

compiler包是用Python编写的字节码转换器的Python源代码。它使用内置解析器和标准parser模块生成具体的语法树。该树用于生成抽象语法树(AST),然后生成Python字节码。