调用其他正在运行的模块中的函数(并传递 var),以更改那里的变量

Call function(and pass var) in other running module that changes the vars there

提问人:Plem 提问时间:11/7/2023 最后编辑:Andrej KeselyPlem 更新时间:11/9/2023 访问量:58

问:

作为初学者,很难用一行来表述问题。但问题是:我有两个模块并排运行(带有子进程。打开)。我想将 module1 中的变量传递给 module2 中的函数。该函数仅在 module2 中更改一组全局变量。导入似乎不起作用,因为两个模块都在自己的主循环中运行。(这似乎阻止了导入过程。 任何提示。 谢谢,彼得

Module1.py

x=0
y=0

def changePar(v):
    global x, y
    x += v
    y += v

While True:
    #do something
    print(x,y) #hopefully the changed values

Module2.py

From Module1 import changePar
m1 = 5

Module1.changePar(m1)
    
While True:
    #do something
函数 导入 子进程 python-module

评论

0赞 Armali 11/7/2023
哪个进程执行子进程。打开
0赞 Plem 11/7/2023
这两个模块都是打开的 bij 子进程。在第三个模块中打开。
0赞 Lourenço Monteiro Rodrigues 11/7/2023
当 Module2 从 Module1 导入时,它会触发那里的无限循环,因此导入永远不会结束。这就是目的,允许导入模块而不会意外开始运行脚本。看这里if __name__ == '__main__'
0赞 Armali 11/8/2023
@Plem – 第三个模块可以通过开放管道将值从 Module2.py 传递到 Module1.py
0赞 Plem 11/8/2023
名称主要情况已解决。但是现在在模块 1 中,我有两个不同的 x 和 y 值。在 changePar 中,新值出现,而在 while 循环中,原始分配的值保持活动状态?毫无头绪.... @Armali:我该怎么做,让第三个模块使用“管道”?

答:

0赞 Armali 11/9/2023 #1

我该怎么做,让第三个模块使用“管道”?

第三个模块:

from subprocess import Popen, PIPE
M1 = Popen(['python3', 'Module1.py'], stdin =PIPE)
M2 = Popen(['python3', 'Module2.py'], stdout=PIPE)
M1.stdin.write(M2.stdout.readline())
M1.stdin.flush()

Module1.py:

import os, sys
x=0
y=0

def changePar(v):
    global x, y
    x += v
    y += v

os.set_blocking(sys.stdin.fileno(), False)
while True:
    #do something
    l = sys.stdin.readline()
    if l: changePar(int(l))
    print(x, y) # hopefully the changed values

Module2.py:

m1 = 5
print(m1, flush=True)

评论

1赞 Plem 11/10/2023
海·阿玛利。谢谢你这个例子。我收到一个错误,指出 stdin 未知。但是当有更多时间时,我会尝试更深入地研究。
0赞 Armali 11/10/2023
这很令人惊讶 - 你在哪一行收到这个错误?
1赞 Plem 11/11/2023
不好意思。在精确重建您的线条后,它可以工作。但是我需要的最后一步是不仅从 module2 发送 1 个值,而且每次在某处发生更改时都发送一个新值。现在,当我 fi.创建一个 while 循环来计算一个值并发送该值,每次发送时,只发送第一个值。那么,我哪里出了问题。(I=0 而 true: m1=i print(m1, flush =True)
0赞 Armali 11/13/2023
为了重复该过程,我们还必须在第三个模块(第一个代码块的最后两行)中重复切换。
0赞 Plem 11/15/2023
你的意思是 M1.stdin...线?把它们放在一会儿 True 循环?