python中def中的for循环不会迭代

时间:2019-05-14 18:31:22

标签: python

将argeparse传递为us-east-1,us-east-2,us-east-3

# Setup commandline arguments
parser = argparse.ArgumentParser(description='using Terraform')
parser.add_argument(
    '-r',
    '--region',
    type=str,
    required=True,
    help='Region in which the ec2 need to be created')

然后尝试在每个区域进行循环

for region_1 in ([region]):
  print(region_1)

对于print(region_1),它打印所有区域,但我希望它循环循环并一次打印一个区域。请让我知道可以做什么

3 个答案:

答案 0 :(得分:2)

如果您想更好地定义应如何传递参数,则此answer解决了您的问题。

例如,您应该像--region 'us-east-1' 'us-east-2' 'us-east-3'一样传递它。并使用nargs定义您的参数选项,例如:

parser.add_argument(
    '-r',
    '--region', 
    nargs='+',
    type=str,
    required=True,
    help='Region in which the ec2 need to be created' 
)

如果您要使用逗号分隔字符串,请执行以下操作:

for r in region.split(","):
  print(r)

答案 1 :(得分:2)

您可以通过将nargs中的-r/--regions用于argparse来做到这一点,

$ cat arg.py 
import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument(
    '-r',
    '--regions', 
    dest='regions',
    nargs='+',
    required=True,
    help='foo bar'
)

args = parser.parse_args()

for region in args.regions:
    print(region)

$ python arg.py -r us_east us_west us_east1
us_east
us_west
us_east1

答案 2 :(得分:0)

您正在遍历包含一个元素的列表:region[region]是一个包含region的列表,就像[1]是一个包含1的列表一样。

在迭代之前不要将变量包装在另一个列表中:

for region_1 in region: