2014-01-08 75 views
0

這裏是我的腳本:設置環境變量,例如,它可以在我的程序外部讀取

try: 
    os.environ['CONSOLE'] = '1' 
    while True: 
     ... 
except KeyboardInterrupt: 
    del os.environ['CONSOLE'] 

我正在嘗試設置所謂CONSOLE的環境變量。當這個程序運行時,該變量應該存在,一旦我用Ctrl + C退出它,它應該消失。

當我離開的程序運行,並嘗試從我的外殼印花它,但是,我得到:

$ echo $CONSOLE 
CONSOLE: Undefined variable. 

我似乎無法無論是從我的PHP腳本讀取它。我的變量在哪裏?我以爲os.environ應該允許我這樣做?

+2

你不能這樣做。這些變量不會持續存在,並且在父shell中不可用。您需要以其他方式傳遞信息。 –

+0

然後在Python腳本和PHP腳本之間共享一個布爾值的最簡單方法是什麼?輪詢一個文件似乎有點跛腳。 – mpen

+1

'echo export CONSOLE = 1 >>〜/ .bash_rc' then'sh〜/ .bash_rc'但是我不認爲這就是你想要的東西......你究竟在做什麼?你最好的辦法可能是重新考慮你的方法(這讓我想起那些XY問題) –

回答

4

這是shell的工作原理,每個新進程都是fork/exec'd,因此您的Python腳本是從啓動它的shell啓動它的running in a separate process

通過任何方式設置環境變量不會更改它啓動的shell中的變量,因爲腳本環境和原始shell的環境是不同的。

正如你可以在這裏看到,它沒有得到劇本後輸了,但即使在蟒蛇仍在運行(bash的4.2,蟒蛇3.3)

>>> import os 
>>> os.environ['CONSOLE'] = '1' 
>>> 
[1]+ Stopped     python3.3 
$ echo $CONSOLE 

$ fg 
python3.3 

>>> os.environ['CONSOLE'] 
'1' 

如果你想有效地獲得命名的共享內存在PHP腳本和Python腳本之間,你可以像use a FIFO那樣讀寫,或者通過套接字進行通信。