python - 在 Python 脚本之间共享变量值?
问题描述
对于我正在处理的基于 Raspberry Pi 的项目,我想要一个主程序和一个“状态检查器”辅助脚本。换句话说,当第一个程序启动时,我希望它作为后台服务启动并将我踢回终端,然后可以使用辅助程序检查第一个程序的状态/进度。
我需要主程序将变量值发送到状态检查脚本,然后将它们打印到终端。我找到了这个旧帖子,但它似乎不起作用。
我从旧帖子中修改了一些代码,但在这里。import main
不导入函数,它似乎只是运行main.py
. 我将for
循环添加main.py
为我将在主脚本中执行的操作的占位符。
#main.py
from multiprocessing import Process,Pipe
import time
def f(child_conn):
msg = "Hello"
child_conn.send(msg)
child_conn.close()
for i in range(1000000):
print(i)
time.sleep(0.05)
#second.py
from multiprocessing import Process,Queue,Pipe
from main import f
if __name__ == '__main__':
parent_conn,child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
print(parent_conn.recv()) # prints "Hello"
解决方案
问题是当 second.py 从 main.py 导入 f 时,它会在全局范围内运行所有内容。如果您删除它们,您可以看到您的流程和管道确实有效。如果您想保留该部分,您可以执行以下操作:
if __name__ == '__main__':
for i in range(1000000):
print(i)
time.sleep(0.05)
请参阅this answer为什么会这样:
推荐阅读
- python - Cygwin:无法从本地目录安装 paramiko
- amazon-web-services - 我的基于 Cognito 的应用程序如何确定登录用户应该可以使用哪个 UI?
- ignite - 找不到 JDBC 的类“IgniteJdbcThinDataSource”
- sqlalchemy - sqlalchemy load_only 列并使用标签重命名列名
- apache - Apache 代理背后的 Traefik
- c# - IISExpress 对数据库连接的限制
- android - Firebase 推送通知无需单击即可打开活动
- c++ - 为什么 return 语句和 print 语句返回不同的答案?
- pine-script - 在 Pinescript Strategy tester 中分别跟踪 LONG 和 SHORT 利润?
- flutter - Flutter 禁用标签栏项目