比如我可以做這樣的事情是否有一個python函數來爲python代碼字符串生成字節碼?
pythonCode = "print 'hello world'"
pyc = generate_bytecode(pythonCode)
其中PYC將包含Python代碼的字節碼?
編輯:我的目標主要是準確地得到將寫入到一個.pyc文件中的變量。神奇的數字,時間戳的十六進制代碼版本和所有
比如我可以做這樣的事情是否有一個python函數來爲python代碼字符串生成字節碼?
pythonCode = "print 'hello world'"
pyc = generate_bytecode(pythonCode)
其中PYC將包含Python代碼的字節碼?
編輯:我的目標主要是準確地得到將寫入到一個.pyc文件中的變量。神奇的數字,時間戳的十六進制代碼版本和所有
這就是所謂compile
:
>>> compile('print "Hi!"', 'abc', 'single')
<code object <module> at 0000000002555D30, file "abc", line 1>
>>> eval(compile('print "Hi!"', 'abc', 'single'))
Hi!
傳遞'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
請問您的用例是什麼? –
我注意到在python文件中使用python 2.7.5字節碼中的空格並不重要,而且您可以直接在.pyc文件上調用python。我想爲使用生成的字節碼的Python代碼編寫混淆器 – imkendal
不是出於安全原因,僅僅因爲我很無聊,這聽起來像是有趣的事 – imkendal