提问人:Plem 提问时间:11/7/2023 最后编辑:Andrej KeselyPlem 更新时间:11/9/2023 访问量:58
调用其他正在运行的模块中的函数(并传递 var),以更改那里的变量
Call function(and pass var) in other running module that changes the vars there
问:
作为初学者,很难用一行来表述问题。但问题是:我有两个模块并排运行(带有子进程。打开)。我想将 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
答:
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 循环?
评论
if __name__ == '__main__'