让我们假设我有一个像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")
有可能做这样的事吗?意思是,用另一个程序更改正在运行的程序的全局变量?
提前谢谢!
答案 0 :(得分:4)
您描述的内容(共享相同变量的程序)只能在不同的threads(共享相同的python解释器和数据)之间,而不能在不同的进程之间。
现代操作系统不允许程序访问另一个程序的内存。所以你不能只是进入另一个过程的记忆并改变那里的东西。允许这会产生各种错误和安全问题。
可以使用进程间通信与其他程序通信。这可以用例如sockets,memory mapped files或写入彼此的标准输入和输出。在类UNIX操作系统上也支持semaphores, shared memoy and message queues。
multiprocessing
模块提供Queue
and Pipe
个对象,以允许相关处理对象相互通信。
答案 1 :(得分:2)
我正在使用的解决方法。是在某处创建一个空文件。 那个前卫。如果它是空的,可以从这个文件中读取(比如每2秒左右),然后什么也不做。如果需要,另一个可以写入此文件。在写入之后,另一个程序将从文件中读取写入的数据,将其用作新的VAR。然后清除文件,准备好新的读取。我在从文件读取的服务器上使用它,然后从另一个程序,我可以发送“命令”(使用它到语音控制照明)到服务器,打开/关闭灯等等!
答案 2 :(得分:0)
是的,但这是一个动态更改,因此如果您稍后再次静态加载模块,则更改将不会保留。但是,无论何时在更改后使用模块,它都会一直存在。
您甚至可以简单地调用first.GLOBALVAR = 'banana'
来获得相同的结果。