2012-01-18 130 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