2013-05-06 3 views
3

—을 base64로 인코딩 된 문자열 —으로 저장하고 디스크에 쓰지 않고 실행할 수있는 방법은 무엇입니까?파이썬 스크립트에 내장 된 .exe 파일 실행

요점은 제어/암호/직렬 시스템을 설치하고 py2exe로 컴파일하는 것입니다. 그런 다음 내 코드에서 원할 때 포함 된 파일을 실행할 수 있습니다.

+0

Windows가 맞습니까? 왜 파이썬에서 이진 조각의 탄생을 구현하지 않습니까? – tMC

+0

tMC : 플래시 실행 파일입니다. – leferreyra

+0

왜 디스크에 쓰지 않으려합니까? – abarnert

답변

4

파이썬이 자식 프로세스를 실행하는 모든 메커니즘에는 파일 이름이 필요합니다.

Win32 API의 하위 기능인 CreateProcess도 마찬가지입니다. 따라서 해당 레벨까지 떨어 뜨리는 것이 쉬운 방법이 아닙니다. 이

ZwCreateProcess/NtCreateProcess 아래로 낙하하여이 작업을 수행 할 수있는 방법입니다. 낮은 수준의 NT API를 사용하는 방법을 알고 있다면 this post을 이해해야합니다. 네가 그렇게하지 않는다면, 그것은 너무 많은 대답으로 설명 할 수있다.

물론, RAM 드라이브를 만들거나 사용할 수도 있고 가상 파일 시스템을 시뮬레이트 할 수도 있지만 파일을 만들지 않으려 고 시도하는 것은 좀 어리 석다.

그래서 올바른 대답은 파일에 exe를 작성한 다음 실행하는 것입니다. 예를 들어,이 같은 일이 :

fd, path = tempfile.mkstemp(suffix='.exe') 
code = base64.b64decode(encoded_code) 
os.write(fd, code) 
os.fchmod(fd, 0o711) 
os.close(fd) 
try: 
    result = subprocess.call(path) 
finally: 
    os.remove(path) 

이 Windows와 * nix에서 모두 작동해야하지만 완전히 테스트되지 않은, 그리고 아마도 적어도 하나 개의 플랫폼에 버그가 있습니다.

분명히, 여러 번 실행하려면 완료 할 때까지 remove을 사용하지 마십시오. 또는 적절한 영구 디렉토리를 사용하고 누락되었거나 오래된 경우에만 작성하십시오.

+0

좋아, 그렇게 쉬운 방법이없는 것처럼 보이고, 나는 Windows API에 너무 깊이 들어가기를 원하지 않는다. 나는 애매한 임시 파일에 써야 할 것 같아. – leferreyra