如何将 for 循环中的变量从一个函数传递到另一个函数 [python]

问题描述 投票:0回答:1

我想创建一个收集三个变量值的数组。 这些变量值是从我的 Azure Keyvault 获取的。

这是脚本:

CREDENTIAL = DefaultAzureCredential(exclude_shared_token_cache_credential=True, exclude_environment_credential=True, exclude_managed_identity_credential=True, exclude_visual_studio_code_credential=True)
KV_PARTIAL_NAME = "KeyVault_name-"

def get_secret(kv_client, secret_name):
  return kv_client.get_secret(secret_name).value 

# Subscription identification    
def environments():
  args = parse_arguments() 
  env = args.env_name
  subscription_name = env
  if env == "Prod":
     subscription_name = "Production"
  print(f"The script is running on {subscription_name}")
  azure_key_vault_env_specific_url = f"https://{KV_PARTIAL_NAME}-{env}.vault.azure.net/"
  _secret_client = SecretClient(vault_url=azure_key_vault_env_specific_url, credential=CREDENTIAL)
  configuration = [ ]
  for configuration in _secret_client:
    ELASTIC_SEARCH_USER = _secret_client.get_secret("Elastic--User").value
    ELASTIC_SEARCH_PASSWORD = _secret_client.get_secret("Elastic--Password").value
    ELASTIC_SEARCH_URL = _secret_client.get_secret("Elastic--URL").value
  return azure_key_vault_env_specific_url, configuration

# Provide argument -e for the script to choose the correct subscription
def parse_arguments():
  parser = argparse.ArgumentParser()
  parser.add_argument('--env_name', '-e', type=str, choices=['Dev', 'QA', 'Prod'],  help='The short for the environment for subscription', required=True)
  return parser.parse_args()

def indice_delete(configuration):
  elastic_auth_uri = f"https://{ELASTIC_SEARCH_URL}/security/_authenticate"
  response = requests.get(elastic_auth_uri, auth=(ELASTIC_SEARCH_USER, ELASTIC_SEARCH_PASSWORD))        
  search_url_index = "_cat/indices/"
  params_dict = {
  "h":"index,docs.count",
  "s":"docs.count:asc",
  "format":"json"
  }
  elastic_console = f"https://{ELASTIC_SEARCH_URL}/{search_url_index}"
  getRequestElasticSearch = requests.get(elastic_console, auth=(ELASTIC_SEARCH_USER, ELASTIC_SEARCH_PASSWORD), params=params_dict)
  content = json.loads(getRequestElasticSearch.text)
  elastic_console_delete = f"https://{ELASTIC_SEARCH_URL}/"
  for index in content:
   indiciesList = index
   collectdoccount = index['docs.count']
   search_int = int(collectdoccount)
   if search_int == 0:
      index_name = index['index']
      delete_url = f"{elastic_console_delete}{index_name}"
      response = requests.delete(delete_url, auth=(ELASTIC_SEARCH_USER, ELASTIC_SEARCH_PASSWORD))
      if  response.status_code == 200:
          print("index deleted -" , "index name:" , index['index'] , ",  doc.count:" , index['docs.count'] , ",  elasticsearch url index:" , delete_url)
      if  response.status_code != 200:
          print ("index not deleted -" , "index name:" , index['index'] , ",  Reason:" , response.content)

if __name__ == '__main__':
   pass_credentials = environments()
   indice_delete(pass_credentials)
   

目前,(环境函数的)for 循环中的变量无法被其他函数访问,例如索引_删除

你能帮我解决这个问题吗,因为我已经没有主意了。

python function for-loop
1个回答
0
投票

您可以使用

global
关键字在函数内部将变量声明为全局变量。 您也可以返回它们,并在下一个函数中使用返回值。

© www.soinside.com 2019 - 2024. All rights reserved.