Python: запустить двоичный файл непосредственно в памяти на окнах? [Дубликат]

попробуйте это

<?php
    echo "<script> var x = ". json_encode($phpVariable)."</script>";
?>

-

-После попытки этого какое-то время Хотя он работает, однако он замедляет работу. поскольку php является скриптом на стороне сервера, а javascript - пользователем.

3
задан phant0m 6 May 2013 в 21:01
поделиться

1 ответ

Все механизмы, которые Python выполняет для выполнения дочернего процесса, требуют имени файла.

И поэтому базовая функция CreateProcess в Win32 API, поэтому нет даже простой способ обойти его, спустившись на этот уровень.

Там есть способ сделать это, отбросив до ZwCreateProcess / NtCreateProcess . Если вы знаете, как использовать низкоуровневый API NT, этот пост должен быть всем, что вам нужно, чтобы понять его. Если вы этого не сделаете, это слишком сложно объяснить в ответ 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)

Это должно работать как на Windows, так и на * nix, но оно полностью не тестировалось и, вероятно, будет иметь ошибки, по крайней мере, на одной платформе.

Очевидно, что если вы хотите выполнить его несколько раз, не делайте remove до тех пор, пока вы не закончите с ним. Или просто используйте некоторый подходящий постоянный каталог и напишите его, только если он отсутствует или устарел.

4
ответ дан abarnert 20 August 2018 в 14:48
поделиться
  • 1
    Хорошо, поэтому, похоже, нет простого способа сделать это, и я не хочу слишком углубляться в Windows API, так что. Наверное, мне просто нужно написать его в неясном временном файле. – leferreyra 6 May 2013 в 21:58
Другие вопросы по тегам:

Похожие вопросы: