2012-10-23 34 views
1

讓我們想象一下,我有一個Python程序像這樣的(first.py):更改運行Python程序的全局變量與另一個Python程序

GLOBALVAR = "pineapple" 

def changeVAR(newValue): 
    global GLOBALVAR 
    GLOBALVAR = newValue 

while(True): 
    print GLOBALVAR 

,我想CHANTE全局變量GLOBALVAR與第一個正在運行的另一個python程序。例如(second.py):

from second import changeVAR 

#do something 
first.changeVAR("banana") 

是否有可能做這樣的事情?意思是,用另一個程序來改變運行程序的全局變量?

預先感謝您!

回答

4

您所描述的內容(共享相同變量的程序)只能在不同threads(共享相同的python解釋器和數據)之間進行,而不能在不同進程之間進行。

現代操作系統不允許程序訪問另一個程序的內存。所以你不能僅僅進入另一個過程的記憶並改變它。容許這會造成各種錯誤和安全問題。

使用進程間通信可以與另一個程序進行通信。這可以通過例如socketsmemory mapped files或寫入彼此的標準輸入和輸出。在類UNIX操作系統上也支持semaphores, shared memoy and message queues

multiprocessing模塊提供了Queue and Pipe對象以允許相關的處理相互交談。

0

是的,但這是一個動態變化,所以如果您以後再次靜態加載模塊,更改將不會持續。但是,任何時候在更改後使用模塊時,它都會停留。

您甚至可以簡單地撥打first.GLOBALVAR = 'banana'來獲得相同的結果。

+0

導入模塊並不會與另一個正在運行的程序建立連接,這似乎是Tallis想要做的。 –

+0

我完全同意這一點,只是想解釋發生了什麼。你的回答很有幫助。 – bossylobster

1

我正在使用的解決方法。是在某處創建一個空文件。 然後一個編。如果它是空的,可以從這個文件中讀取(比如說每2秒左右),然後什麼也不做。另一個可以寫入這個文件,如果需要的話。 WRITE後,另一個程序將讀取文件中的寫入數據,將其用作新的VAR。然後清除文件,準備好進行新的讀取。我在一個從文件讀取的服務器上使用它,然後從另一個程序中,我可以向服務器發送「命令」(用於語音控制照明),打開/關閉燈光等等!