저는 파이썬에 처음 접했고, 이제 조금 놀아 왔습니다. 나는 marshal
와 함께 compile()
내장 함수와 함께 놀았고 exec()
을 내장했다. 나는 대답을 찾지 못하는 것 몇 가지를 알아 챘다. 파일에 저장하고, marshal.dump()
를 통해 연재 compile()
를 통해 코드를 객체로 컴파일 할 때마샬링 된 코드 객체의 파이썬 exec()
with open('simple.py', 'r') as f:
code = f.read()
exec code
그러나, 다음 읽기 : 같은 것을 통해 실행할 때이 잘 작동
#!/usr/bin/python
def foo():
print "Inside foo()..."
def main():
print "This is a simple script that should count to 10."
for i in range(0, 10):
print "This is iteration number", i
foo()
if __name__ == "__main__":
main()
: 다음 스크립트를 고려 파일에서 marshal.load()
을 통해 직렬화를 해제 한 후 exec()
으로 실행하면 NameError
이라는 오류 메시지가 표시되어 전역 이름 foo
이 정의되지 않았습니다.
dir()
의 결과를 보았습니다. import()
코드를 보면, foo()
에 대한 정의가 있음을 알 수 있습니다. I은 또한 당신을 제공, exec 'import %s' % modname
같은 일을하고 dis.dis(sys.modules[modname])
을하고 반대로 내가 볼 수있는 유일한 것은 (main()
에 대한 LOAD_NAME
및 CALL_FUNCTION
, 내가이 역 직렬화 코드 객체에 dis.dis()
를 사용하여 (marshal.load()
를 통해 읽기) 것으로 나타났습니다 예상대로 전체 분해).
import()
이 주소를 얻는 데 참조 할 수있는 조회 테이블이 있다고 정정합니까? (기록을 위해 나는 을 확인했고, py_compile.compile()
을 통해 생성 된 바이트 코드와 compile()
은 32 비트 타임 스탬프와 함께 imp.get_magic()
이었다. 그러한 테이블이 존재한다면 그것을 참조 할 수있는 좋은 방법이 있습니까?
감사합니다.
marshal.dump()를 통해 직렬화 될 때? 텍스트 파일? – Claudiu
'compile()'을 통해 생성 된 스크립트의 코드 객체. – user1633448
무슨 뜻인가요? 다음과 같이 작동합니다 : open ('simple.py', 'r') f : code = f.read() open ('simple.mash', 'w') with f : marshal.dump (코드 F) F와 같은 오픈 ('simple.mash', 'R')와 : 당신'marshal.dump 전에 코드 = marshal.load (F) 간부 코드 – Dhara