使用另一个Python程序更改正在运行的Python程序的全局变量

时间:2012-10-23 22:05:53

标签: python global-variables

让我们假设我有一个像Python这样的程序( first.py ):

GLOBALVAR = "pineapple"

def changeVAR(newValue):
     global GLOBALVAR
     GLOBALVAR = newValue

while(True):
   print GLOBALVAR

我希望在第一个运行时使用另一个python程序将全局变量 GLOBALVAR 转移。例如( second.py ):

from second import changeVAR

#do something
first.changeVAR("banana")

有可能做这样的事吗?意思是,用另一个程序更改正在运行的程序的全局变量?

提前谢谢!

3 个答案:

答案 0 :(得分:4)

您描述的内容(共享相同变量的程序)只能在不同的threads(共享相同的python解释器和数据)之间,而不能在不同的进程之间。

现代操作系统不允许程序访问另一个程序的内存。所以你不能只是进入另一个过程的记忆并改变那里的东西。允许这会产生各种错误和安全问题。

可以使用进程间通信与其他程序通信。这可以用例如socketsmemory mapped files或写入彼此的标准输入和输出。在类UNIX操作系统上也支持semaphores, shared memoy and message queues

multiprocessing模块提供Queue and Pipe个对象,以允许相关处理对象相互通信。

答案 1 :(得分:2)

我正在使用的解决方法。是在某处创建一个空文件。 那个前卫。如果它是空的,可以从这个文件中读取(比如每2秒左右),然后什么也不做。如果需要,另一个可以写入此文件。在写入之后,另一个程序将从文件中读取写入的数据,将其用作新的VAR。然后清除文件,准备好新的读取。我在从文件读取的服务器上使用它,然后从另一个程序,我可以发送“命令”(使用它到语音控制照明)到服务器,打开/关闭灯等等!

答案 2 :(得分:0)

是的,但这是一个动态更改,因此如果您稍后再次静态加载模块,则更改将不会保留。但是,无论何时在更改后使用模块,它都会一直存在。

您甚至可以简单地调用first.GLOBALVAR = 'banana'来获得相同的结果。