2013-11-28 2 views
0

내가 할 수있는 PYC는 pythonCode의 바이트 코드를 포함하는 것이파이썬 코드 문자열을위한 바이트 코드를 생성하는 파이썬 함수가 있습니까? 예를 들어

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

같은?

편집 : 내 목표는 파일의 .pyc에 변수에 쓰여지는 것이 무엇인지 정확하게 파악하는 것입니다. 매직 넘버, 타임 스탬프, 코드의 진수 버전과 모든

+0

사용 사례는 무엇입니까? –

+0

파이썬 2.7.5 바이트 코드에서 공백이있는 pyc 파일을 다루는 동안주의를 기울였다. 파이썬 파일을 .pyc 파일로 직접 호출 할 수있다. 생성 된 바이트 코드를 사용하는 파이썬 코드에 대한 obfuscator를 작성하고 싶습니다. – imkendal

+0

보안상의 이유로, 지루하고 재미 있기 때문에 들립니다. – imkendal

답변

1

사용 compiler 패키지 :

compiler 패키지는 파이썬으로 작성된 번역기 바이트 코드 파이썬 소스입니다. 내장 구문 분석기와 표준 parser 모듈을 사용하여 구체적인 구문 트리를 생성합니다. 이 트리는 추상 구문 트리 (AST)를 생성 한 다음 파이썬 바이트 코드를 생성하는 데 사용됩니다.

+0

컴파일러 패키지의 compileFile 메소드를 사용하여 해결했습니다. 후자의 방법을 사용하여 완전히 생성 된 pyc 파일을 얻는 방법을 찾는 것이 훨씬 어렵 기 때문에 실제 compile.compile 명령을 사용하는 것과는 달리 pyc 파일을 생성하여 메모리에 다시 읽어들입니다. 이 대답은 일반적으로 컴파일러 패키지를 권장하기 때문에 이것이 내 대답이 될 것입니다. 그러나 그 모든 답변 주셔서 감사합니다. 모든 의견과 응답이 도움이되었습니다. – imkendal

2

는 그것은 compile라고 :

>>> compile('print "Hi!"', 'abc', 'single') 
<code object <module> at 0000000002555D30, file "abc", line 1> 
>>> eval(compile('print "Hi!"', 'abc', 'single')) 
Hi! 
2

파이썬 문에서 코드 객체를 생성합니다 modecompile()에 관한 'exec' 전달. 코드 객체의 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   
관련 문제