Python跨脚本访问循环全局变量时如何避免执行原脚本?
解决跨脚本访问全局变量且避免导入时执行脚本的问题
1. 先修改file1.py:阻止导入时执行代码,同时正确定义全局变量
你原来的file1.py直接调用了a_function(),这会导致只要其他脚本导入它,整个循环录制的逻辑就会自动执行,完全不符合你的需求。另外,函数外写global x是多余的,全局变量直接定义即可,只有在函数内部要修改全局变量时,才需要加global声明。还有,你原来的x只有在函数循环里才赋值,不运行函数的话x根本不存在,所以得先给它初始化一个值。
修改后的file1.py代码:
import os # 初始化全局变量x,确保未运行函数时也能访问到它 x = 0 def a_function(): global x # 声明此处要修改全局变量x,避免被当成局部变量 while True: for x in range(12): cmd = f'rosbag record -O /home/mubashir/catkin_ws/src/germany1_trush/rosbag/{x}.bag /web_cam --duration 5 ' os.system(cmd) # 只有直接运行file1.py时,才执行录制函数 if __name__ == '__main__': a_function()
2. 调整file2.py:现在可以正常访问全局变量x
现在导入file1的时候,不会触发录制逻辑,直接就能拿到全局变量x:
from file1 import x print(x)
额外情况:如果要获取录制过程中x的实时值
要是你想拿到a_function()运行时x的实时变化值,因为这个函数是无限循环,得用多线程来运行它,避免卡住主程序。
调整后的file1.py
import os import threading x = 0 def a_function(): global x while True: for x in range(12): cmd = f'rosbag record -O /home/mubashir/catkin_ws/src/germany1_trush/rosbag/{x}.bag /web_cam --duration 5 ' os.system(cmd) def start_recording(): # 用线程运行录制函数,不阻塞主线程 record_thread = threading.Thread(target=a_function) record_thread.daemon = True # 主线程结束时,子线程自动退出 record_thread.start() if __name__ == '__main__': start_recording() # 此处可添加主程序逻辑
对应的file2.py
from file1 import x, start_recording import time # 启动录制线程 start_recording() # 循环打印x的实时值 while True: print(f"当前x的值:{x}") time.sleep(1)
内容的提问来源于stack exchange,提问作者Mubashir
相关产品推荐
相关产品推荐

