Python用于执行子进程的所有机制都需要文件名。
CreateProcessWin32 API 中的基础功能也是如此,因此降低到该级别甚至没有简单的方法。
有是一种通过下降到做到这一点ZwCreateProcess/ NtCreateProcess。如果你知道如何使用低级别的API新台币,这个帖子应该是所有你需要了解它。如果不这样做,那么在SO答案中解释太多了。
当然,您也可以选择创建或使用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)
Run Code Online (Sandbox Code Playgroud)
这在Windows和* nix上都可以使用,但尚未经过完全测试,并且至少在一个平台上可能存在错误。
显然,如果您想多次执行它,请remove在完成后再执行。或者只是使用一些适当的持久性目录,并仅在缺少或过时时才写入。