2

假设我在 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")

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

先感谢您!

4

3 回答 3

5

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

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

可以使用进程间通信与另一个程序进行通信。这可以通过例如套接字内存映射文件或写入彼此的标准输入和输出来完成。在类 UNIX 操作系统上还支持信号量、共享内存和消息队列。

multiprocessing模块提供QueuePipe对象以允许相关的处理相互交谈。

于 2012-10-23T22:27:09.360 回答
3

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

于 2015-04-29T11:34:00.007 回答
0

是的,但这是动态变化,所以如果你稍后再次静态加载模块,变化将不会持续。但是,无论何时您在更改后使用该模块,它都会一直存在。

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

于 2012-10-23T22:13:42.323 回答