Передать сессию Python сценарию, написанному с другой версией Python - PullRequest
2 голосов
/ 18 января 2012

Например, если у меня есть:

(1) ScriptA, написанный в 2.X, так как ему нужны библиотеки 2.X

(2) ScriptB, написанный на 3.X, так как ему нужны библиотеки 3.X

Есть ли способ сделать следующее?:

-> ScriptA вызывает scriptB (переключение версии Python), передавая объект сеанса без его сериализации.

Использование командной строки позволяет переключать версию Python, но без возможности передачи объекта сеанса ...

- РЕДАКТИРОВАТЬ -

Под сеансом я имею в виду, например, что у меня есть открытое соединение TCP / IP с данным сервером, и я не хочу открывать новое во втором сценарии

1 Ответ

0 голосов
/ 18 января 2012

Он видит то, что вы хотите, возможно - хотя у меня нет возможности проверить это с помощью полного кода, я провел некоторое тестирование на терминале, и все прошло нормально -

Открытое соединение TCP / IP - это ресурс процесса, которым можно поделиться с дочерними элементами и сибсами процесса.

Следовательно, ничто не мешает вам использовать традиционные вызовы Posix для запуска нового процесса, запуска сценария python3 и создания внутри него сокета, используя для него только атрибут fileno.

"fileno" - это то, что идентифицирует соединение на уровне ОС, и это параметр, который можно передать конструктору socket.socket.

Итак, в вызывающем скрипте вы делаете что-то вроде:

import os
....

pid = os.fork()
if pid == 0:
    os.execv("/usr/bin/python3.2", ["python3.2", path_to_python3_script, mysocket.fileno")

и на скрипте python3.2:

import sys
import socket
socket_fileno = int(sys.argv[1])
mysocket = socket.socket(fileno=socket_fileno)

Кстати, вы не указали ОС, над которой работаете - если вам не повезло с использованием Windows, она не использует fork, но должен быть обходной путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...