设置环境变量,以便可以在我的程序之外读取

mpe*_*pen 0 python linux

这是我的脚本:

try:
    os.environ['CONSOLE'] = '1'
    while True:
        ...
except KeyboardInterrupt:
    del os.environ['CONSOLE']
Run Code Online (Sandbox Code Playgroud)

我正在尝试设置一个名为的环境变量CONSOLE。在此程序运行时,该变量应该存在,一旦我用Ctrl + C退出该变量,该变量就会消失。

但是,当我让程序运行并尝试从外壳打印它时,我得到:

$ echo $CONSOLE
CONSOLE: Undefined variable.
Run Code Online (Sandbox Code Playgroud)

我似乎也无法从我的PHP脚本中读取它。我的变量在哪里?我以为os.environ应该允许我这样做?

Rya*_*ing 5

这是外壳工作原理的本质,每个新进程都是fork / exec'd,因此您的Python脚本在与启动它的外壳不同的进程中运行

通过任何方式设置环境变量都不会更改从其启动的shell中的变量,因为脚本的环境和原始shell的环境是不同的。

正如您在此处看到的那样,脚本执行后并不会丢失,甚至在python仍在运行时(bash 4.2,python 3.3)

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

$ fg
python3.3

>>> os.environ['CONSOLE']
'1'
Run Code Online (Sandbox Code Playgroud)

如果您试图有效地获取PHP和Python脚本之间的命名共享内存,则可以使用FIFO来进行读/写,就像处理文件一样,或者通过套接字进行通信。