Skip to main content
 首页 » 编程设计

python之将 python session 传递给用另一个版本的 python 编写的脚本

2025年05月04日13kenshinobiy

例如,如果我有:

(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,但应该有一个解决方法。