例如,如果我有:
(1) ScriptA,用 2.X 编写,因为它需要 2.X 库
(2) ScriptB,用3.X写的,因为它需要3.X库
有没有办法做到以下几点?:
-> ScriptA 调用 scriptB(切换 Python 版本),传递一个 session 对象而不序列化它。
使用命令行可以切换 python 版本,但不可能传递 session 对象...
-- 编辑 --
session ,我的意思是,例如,我有一个到给定服务器的打开的 TCP/IP 连接,我不想在第二个脚本中打开一个新连接
请您参考如下方法:
它看到你想要的是可能的 - 虽然我不知道如何用完整的代码测试它,但我在终端上做了一些测试,一切顺利 -
打开的 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,但应该有一个解决方法。
