我正在通过python
执行subprocess
脚本并向其传递一个命名参数。在subprocess
脚本中,我必须形成list of tags
(list of key and value pair
),其格式如下所示:
Tags=[
{
'Key': 'string',
'Value': 'string'
},
]
这是我的父脚本:
def call_script(tags):
result = subprocess.Popen(["python","second_script.py","--tags",tags])
result.wait()
if __name__ == '__main__':
tags = '{'
tags = tags + '"Name":"' + username + '"'
tags = tags + ', "Designation":"' + Designation + '"'
tags = tags + ', "Type":"' + type + '"'
tags = tags + '}'
tags = str(tags)
call_script(tags)
这是我的 second_script.py :
if __name__ == '__main__':
# Initialize tags
tags = {}
lst = []
# Basic command line argument parsing to launch using boto
parser = argparse.ArgumentParser()
parser.add_argument('--tags', type=json.loads)
args = parser.parse_args()
print args.tags
# Build a list of tags
for k, v in args.tags.iteritems():
print k
print v
tags['Key'] = k
tags['Value'] = v
print tags
lst.append(tags)
# print 'Tags: ',tags
print "List of Tags: ",lst
当我运行此功能时,我只会在tags
和lst
中看到最后一个键值对。如何按照上面所需的格式显示键值对列表?
示例输入可以是:
Name: Jason
Designation: Analyst
Type: Permanent
因此,所需的输出格式应为:
Tags = [
{
'Key': 'Name',
'Value': 'Jason'
},
{
'Key': 'Designation',
'Value': 'Analyst'
},
{
'Key': 'Type',
'Value': 'Permanent'
},
]
我在上面的代码中得到的tags
输出为 - {'Value': u'Permanent', 'Key': u'Type'}
而lst
为:[{'Value': u'Permanent', 'Key': u'Type'}, {'Value': u'Permanent', 'Key': u'Type'}, {'Value': u'Permanent', 'Key': u'Type'}]
我的代码中出现了什么错误,如何更正呢?
答案 0 :(得分:0)
尝试在for循环中重置tags
:
for k, v in args.tags.iteritems():
tags={} #changed Line
print k
print v
tags['Key'] = k
tags['Value'] = v
print tags
lst.append(tags)
答案 1 :(得分:0)
这是因为dict
是可变的,并且您将同一对象的引用附加到lst
。取代
tags['Key'] = k
tags['Value'] = v
print tags
lst.append(tags)
与
print tags
lst.append({'Key' : k, 'Value' : v})