我的目标是使用Dash创建一个实时图形,以显示批处理作业执行重复任务所需的时间。该图将从批处理作业的日志文件中获取数据,并在其中查找一些特定的单词。
问题是当我想在图形中显示数据时,它仅显示第一个值,而不显示后面的值。
我希望它具有两个独立的函数,但是由于我在使用图形时遇到麻烦,因此我选择暂时将其包含在相同的函数中。
def update_graph():
specific_word = "help"
for i,line in enumerate(lines):
if specific_word in line:
X.append(int(count))
Y.append(int(time))
data = go.Scatter(
x = list(X),
y = list(Y),
name = 'Scatter',
mode = 'lines+markers'
)
return {'data':[data],
'layout': go.Layout(xaxis = dict(range=[min(X), max(X)]),
yaxis = dict(range=[min(Y), max(Y)]))}
我得到的结果只是日志文件中的第一个值,而不是随后的值。
当我用print(data)替换回车线并在终端中执行该功能时,我得到了我想要的结果。
谢谢!
答案 0 :(得分:0)
问题在于python返回第一个值后退出函数。
您可以将要查看的所有值添加到列表中,然后将其返回:
def update_graph():
specific_word = "help"
output = [] # the list output will store all the data
for i,line in enumerate(lines):
if specific_word in line:
X.append(int(count))
Y.append(int(time))
data = go.Scatter(
x = list(X),
y = list(Y),
name = 'Scatter',
mode = 'lines+markers'
)
output.append({'data':[data], #add the values to the list
'layout': go.Layout(xaxis = dict(range=[min(X), max(X)]),
yaxis = dict(range=[min(Y), max(Y)]))})
return output
因此,您将获得一个列表作为返回值。
您可以遍历列表以获取所需的任何元素:
thelist = update_graph()
for item in thelist:
print(item)
#do whatever you want with the item here
答案 1 :(得分:0)
return语句退出循环,因此这不允许for循环继续执行。 要解决此问题,您可以将数据存储在for循环中,并将return语句放置在函数外部。
您可以尝试-
array_name.append( {'data':[data],
'layout': go.Layout(xaxis = dict(range=[min(X), max(X)]),
yaxis = dict(range=[min(Y), max(Y)]))})