2015-06-26 38 views
0

我有一個短暫的,但對我來說非常重要的問題:Python從行書得到變量,並傳遞給其他Python腳本

我想從積極的Python腳本已經運行到另一個Python寫變量腳本。所以我想是這樣的:

$ cat first.py second.py 
#first.py 
def demo(): 
    some_list = [] 
    for i in 'string': 
     some_list.append(i) 
    return list 

#second.py 
from first import demo 

some_list = demo() 
print some_list 

$python second.py 
['s', 't', 'r', 'i', 'n', 'g'] 

我希望我的行書,如「sent.py」不斷地將變量寫入某種「工作空間」,然後例如通過另一個腳本訪問這些變量,例如, 「get.py」。沒有這個,我必須在bash腳本中一起啓動兩個腳本。

因此,我可能正在尋找一個解決方案,首先傳遞python,然後再打到python?我很抱歉,我對術語不太熟悉。

我希望這變得很清楚我的意思,我盡我所能解釋它。 我有點絕望,希望你能幫上忙。我試過並搜索了各種各樣的東西,但它不起作用。

+2

爲什麼不通過套接字寫? https://docs.python.org/2/library/socket.html –

+2

你意識到Python腳本可以運行其他python腳本,對吧? – Thedudxo

+0

你需要某種IPC。從中產生兩個python進程的父環境不能充當共享內存,因爲Unix禁止child2parent更新。 –

回答

0

要獲得像這樣的變量工作區,您需要某種形式的進程間通信,共享內存或存儲。

它可以像使用已知格式的文件(可能是JSON或pickler序列化)和鎖定機制一樣簡單,以確保讀取器等待文件完全寫入。鎖可以通過寫一個單獨的文件來實現,寫者在寫時創建並在完成時創建。

進程間通信可以通過套接字實現,並且TCP套接字可能是最簡單的。您的長時間運行的腳本將運行TCP偵聽器,並且讀取過程將連接並從中讀取。這可能會變得很奇怪,因爲Python有一個全局解釋器鎖,並且在這些通信過程中將不得不阻止。沒有工作可以進行。 Twisted是一個可以解決這個問題的異步框架。協調可用性聆聽和做其他工作可能非常棘手。

共享內存與文件具有類似的互斥排除複雜性,因此它需要有一個專用內存地址供寫入程序指定其寫入鎖定。

我覺得這個文件是最簡單的。長時間運行的進程將完成它的工作,創建鎖定文件,將變量序列化爲JSON(或任何你想要的),然後刪除鎖定文件,然後重複。獨立地,讀取過程會檢查鎖定文件,如果它沒有讀取變量文件並按照需要繼續使用變量。

相關問題