You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:45:46