self.LOG_DIR_LIST_BACKEND = [AMPLI_LOG, VAR_LOG, CORE_DUMP_LOG]
backend_nodes = [backend-1, backend-2, backend-3]
self.log_in_nodes = []
log_file = {}
for LOG_DIR_BACKEND in self.LOG_DIR_LIST_BACKEND:
for node_backend in backend_nodes:
log_in_nodes 'find %s -type f -name \"*log.*.gz\"' % LOG_DIR_BACKEND
log_file[node_backend] = log_in_nodes
self.log_in_nodes.append(log_file)
print "Logs are ", self.log_in_nodes
预期产出:
[{backend-1: AMPLI_LOG, VAR_LOG, CORE_DUMP_LOG, backend-2: AMPLI_LOG, VAR_LOG, CORE_DUMP_LOG, backend-3: AMPLI_LOG, VAR_LOG, CORE_DUMP_LOG}]
当我打印self.log_in_nodes时,输出每次都是新的,它不会附加。我做错了什么?
答案 0 :(得分:0)
每次运行此方法时,它都会重置self.log_in_nodes
,因为您正在执行:
self.log_in_nodes = []
如果你想把东西附加到那个列表,要么把它作为一个类变量,要么把它放在类之外,并只初始化一次。
选项一:
class Foo
log_in_nodes = []
def your_method(self ...):
log_file = {}
for LOG_DIR_BACKEND in self.LOG_DIR_LIST_BACKEND:
for node_backend in backend_nodes:
....
self.log_in_nodes.append(log_file)
选项2: LOG_IN_NODES = []
class Foo
def your_method(self ...):
log_file = {}
for LOG_DIR_BACKEND in self.LOG_DIR_LIST_BACKEND:
for node_backend in backend_nodes:
....
LOG_IN_NODES.append(log_file)
在这两种情况下,列表都会初始化一次,并在每次调用方法时附加。
这是什么:
log_in_nodes 'find %s -type f -name \"*log.*.gz\"' % LOG_DIR_BACKEND`
^^^^^^^^^^^^ Did you miss type this? forget an assignment?
可能你的意思是:
log_in_nodes = 'find %s -type f -name \"*log.*.gz\"' % LOG_DIR_BACKEND
而不是:
backend_nodes = [backend-1, backend-2, backend-3]
你可以这样做:
backend_nodes = range(backend - 1, backend - 4, -1)
虽然不是很短,但与你编写代码的方式相比,它会立即清楚它的作用。