如果已经问到了,很抱歉,但是我在知识库中找不到任何答案。我试图通过递归过程更新字典中的值,下面的代码如下所示:
import os
incmds={
'ip':{
'link':{
'show':[]
},
'addr':{
'show':[]
},
'route':{
'show':[]
}
}
}
cmd_list=[]
def go_through_dict(parental_key,passeddict,cmd_list):
for k,v in passeddict.items():
t=parental_key+' '+k
if isinstance(v, dict):
go_through_dict(t,v,cmd_list)
else:
t=t.strip()
cmd_list.append(t)
with os.popen(t) as f:
# print 'Issueing the command: '+t
v=f.readlines()
# print 'Result:',v
## main ##
cmd=''
go_through_dict('',incmds,cmd_list)
for cmd in cmd_list:
print cmd
print incmds
当我运行它时,我会看到dict的内部值没有被更新。事实上,我最终得到了:
ip route show
ip link show
ip addr show
{'ip': {'route': {'show': []}, 'link': {'show': []}, 'addr': {'show': []}}}
我认为,在默认情况下,变量是通过引用传递的,因此,如果我在过程中修改某个东西,一旦它终止,更改应该在外部反映出来。问题是,我不会用这样的传统方式修改这些值
incmds['ip']['addr']['show']=<output of the command>
这只是一个POC,目标实际上是将一些OS命令描述为dict树,并将输出存储在叶子中。
我应该如何修改我的过程才能真正地修改我的树的叶子(意思是dict的内部元素的值)?
我应该记录下树中的点,然后再用这个表达式来表达吗?或者是怎么做的?
一开始,我喜欢递归过程的想法,因为无论树的大小如何,它都是紧凑的,但现在我面临的问题是不能更新值:-)
提前谢谢你,
亚历克斯
发布于 2017-06-28 12:41:39
归结起来就是当你翻阅一本字典时:
for k,v in passeddict.items():
修改v
,您是而不是修改字典项,您只是为v
分配一个新的值。你应该替换:
v=f.readlines()
通过以下方式:
passeddict[k] = f.readlines()
https://stackoverflow.com/questions/44802584
复制相似问题