【问题标题】:Using If statement to call a functions in Python在 Python 中使用 If 语句调用函数
【发布时间】:2020-06-09 22:45:55
【问题描述】:

我正在运行一个代码来创建 cloudformation 堆栈、删除堆栈、使用 python 使用 json 文件使用定义的参数变量更新堆栈。

我在 init() 函数下定义了 3 个不同的语句。我需要设置一个 if 条件: 如果我想创建一个堆栈,它将调用“create_products” 否则,更新堆栈,它将调用“update_products” elif,删除一个堆栈,它将更新“delete_products”

from __future__ import print_function
import subprocess
import json
import yaml
import sys
import os
import re
import boto3
from glob import glob

def createstack(productName, productId, paramlist): 
    try:
        client = boto3.client('servicecatalog', region_name='us-east-1')
        ProvisioningArtifactId = client.list_provisioning_artifacts(ProductId=productId)
        ArtifactId = ProvisioningArtifactId['ProvisioningArtifactDetails'][0]['Id']
        response = client.provision_product(ProvisionedProductName=productName, ProductId=productId, ProvisioningArtifactId=ArtifactId, ProvisioningParameters=paramlist)
        print(response)
    except Exception as e:
        error = "An error occurred processing this request: " + str(e)
        print(error) 

def updatestack(productName, productId, paramlist):    
    try:
        client = boto3.client('servicecatalog', region_name='us-east-1')
        ProvisioningArtifactId = client.list_provisioning_artifacts(ProductId=productId)
        ArtifactId = ProvisioningArtifactId['ProvisioningArtifactDetails'][0]['Id']
        response = client.update_provisioned_product(ProvisionedProductName=productName, ProductId=productId, ProvisioningArtifactId=ArtifactId, ProvisioningParameters=paramlist)
        print(response)
    except Exception as e:
        error = "An error occurred processing this request: " + str(e)
        print(error)

def deletestack(productName):
    try:
        client = boto3.client('servicecatalog', region_name='us-east-1')
        response = client.terminate_provisioned_product(ProvisionedProductName=productName)
        print(response)
        return response
    except Exception as e:
        error = "An error occurred processing this request: " + str(e)
        return(error)

def init():
    #global args
    with open("list_provisional_product.json") as f:
        product_list = json.load(f)
    with open("testing-pipeline-params.json") as f:
        baselist = json.load(f)

    for product in product_list["update_products"]:
        for provisioned_product_name in product["provisioned_product_names"]:
            updatestack(productName=provisioned_product_name, productId=product["product_id"], paramlist=baselist[provisioned_product_name])

    for product in product_list["delete_products"]:
        for provisioned_product_name in product["provisioned_product_names"]:
            deletestack(productName=provisioned_product_name)

    for product in product_list["create_products"]:
        for provisioned_product_name in product["provisioned_product_names"]:
            createstack(productName=provisioned_product_name, productId=product["product_id"], paramlist=baselist[provisioned_product_name])


def main():
    init()
if __name__== "__main__": 
    main()

【问题讨论】:

    标签: python for-loop if-statement while-loop boto3


    【解决方案1】:

    是的,您必须通过命令行参数从用户那里获取操作名称(创建/更新/删除),或者在代码执行期间通过input 函数询问用户。

    Demo 1:使用sys.argv从命令行参数获取操作名 运行 python 代码时,您必须提供操作名称。这里 Py 文件名是if_loop.py

    import sys
    print("arg:", sys.argv)
    
    try:
        operation_name = sys.argv[1].lower()
    except IndexError:
        print("Argument is missing")
        exit()
    
    if operation_name == "create":
        print("Call Create function")
    elif operation_name == "update":
        print("Call Update function")
    elif operation_name == "delete":
        print("Call Dale function")
    else:
        print("Invalid Operation name")
    

    输出

    Invalid Operation name
    (env) PS C:\Users\vivek\Documents\Workplace\stackoverflow> python .\if_loop.py Create
    arg: ['.\\if_loop.py', 'Create']
    Call Create function
    

    演示2:使用input函数

    operation_name = input("Give Operation Name:").lower()
    if operation_name == "create":
        print("Call Create function")
    elif operation_name == "update":
        print("Call Update function")
    elif operation_name == "delete":
        print("Call Dale function")
    else:
        print("Invalid Operation name")
    

    输出

    Give Operation Name:Update
    Call Update function
    

    【讨论】:

      【解决方案2】:

      非常感谢维韦克!我宁愿采用第一种方法,即 argv,它实际上是根据我的需要工作的!太棒了

      【讨论】:

        猜你喜欢
        • 2017-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多