2012-01-18 102 views
2

举例来说,如果我有:通蟒蛇会议与蟒蛇的另一个版本编写的脚本

(1)SCRIPTA,写在2.X,因为它需要2.X库

(2) scriptB,写在3.X,因为它需要3.X库

有没有办法做到以下几点?:

- > SCRIPTA调用scriptB(开关Python版本),通过会话对象序列化无它。

使用命令行能够切换的Python版本,但没有通过会话对象的可能性...

- 编辑 -

通过会议,我的意思是比如我有一个打开的TCP/IP连接到给定的服务器,并且我不想在第二个脚本中打开一个新的文件

+4

什么是“会话对象”? – 2012-01-18 08:59:18

+2

我会尝试用泡菜,但我不确定它会起作用... – plaes 2012-01-18 09:11:08

+0

@plaes:OP说“没有序列化” – 2012-01-18 09:22:53

回答

0

它可以识别您想要的内容 - 虽然我没有如何测试它与一个完整的代码,我做了一些在终端上的测试,它很好 -

开放的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) 

顺便说一句,你没有指定OS你正在研究 - 如果你运气不好使用Windows,它不会使用fork,但应该有一个解决办法。

+0

嗨jsbueno,感谢这个想法,我会试试看看它是否有效。顺便说一句,我正在研究windows :-) – 2012-01-18 13:00:08