如何在Python中调用另一脚本仅执行一次并获取其中的profile_id变量
解决方法
你之前重复执行SCRIPT1的核心原因是:直接导入未做封装的Python脚本时,Python会默认执行脚本内所有顶层代码,若后续再次调用逻辑就会触发二次执行。可以用以下两种方案实现仅执行一次就拿到profile_id:
方案1:不修改SCRIPT1,直接用exec执行(改动最小)
这个方法直接执行一次SCRIPT1的全部代码,执行完成后profile_id会直接进入当前脚本的命名空间,全程仅执行一次SCRIPT1的请求逻辑:
import json import random from os import listdir from os.path import isfile, join import time import requests # 需导入requests,匹配SCRIPT1的依赖 # 仅执行一次SCRIPT1 exec(open('SCRIPT1.py').read()) # 直接使用拿到的profile_id发起请求 mla_url = 'http://127.0.0.1:35000/api/v1/profile/start?profileId=' + profile_id resp = requests.get(mla_url) jsoni = resp.json()
注意open()内的SCRIPT1路径要写对,若不在当前工作目录请使用绝对路径。
方案2:封装SCRIPT1为可导入模块(更规范,适合长期维护)
先修改SCRIPT1,把核心逻辑封装到函数中,加上if __name__ == '__main__'判断,避免导入时自动执行顶层逻辑:
# SCRIPT1.py修改后代码 import requests # 把请求逻辑封装到函数内 def get_profile_id(): response = requests.request("POST", url, headers=headers, data=payload) return response.text # 仅在单独运行SCRIPT1时才执行以下逻辑,导入时不会触发 if __name__ == '__main__': profile_id = get_profile_id() # 其他SCRIPT1单独运行时需要执行的代码
然后在主脚本中导入调用即可,全程仅执行一次请求:
import json import random from os import listdir from os.path import isfile, join import time import requests from SCRIPT1 import get_profile_id # 仅调用一次函数获取profile_id,不会重复执行请求 profile_id = get_profile_id() # 发起后续请求 mla_url = 'http://127.0.0.1:35000/api/v1/profile/start?profileId=' + profile_id resp = requests.get(mla_url) jsoni = resp.json()
内容的提问来源于stack exchange,提问作者Benaldmandi
相关产品推荐
相关产品推荐

