Перенаправление вывода консоли Python на Dash - PullRequest
0 голосов
/ 28 августа 2018

Как я могу перенаправить / показать вывод консоли (включая выводы, которые я печатаю внутри программы), чтобы он отображался внутри приложения Dash (на экране, который видит пользователь)?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Я не нашел способа, чтобы Dash мог напрямую читать вывод консоли, поэтому я использовал обходной путь, используя текстовый файл. Вот пример кода, который печатает последние 20 строк вывода консоли в Iframe (чтобы сохранить разрывы строк, которые не отображаются в других компонентах text / div):

import dash_core_components as dcc
import dash_html_components as html
import dash
import sys

f = open('out.txt', 'w')
f.close()


app = dash.Dash()

app.layout = html.Div([
    dcc.Interval(id='interval1', interval=1 * 1000, 
n_intervals=0),
    dcc.Interval(id='interval2', interval=5 * 1000, 
n_intervals=0),
    html.H1(id='div-out', children=''),
    html.Iframe(id='console-out',srcDoc='',style={'width': 
'100%','height':400})
])

@app.callback(dash.dependencies.Output('div-out', 
'children'),
    [dash.dependencies.Input('interval1', 'n_intervals')])
def update_interval(n):
    orig_stdout = sys.stdout
    f = open('out.txt', 'a')
    sys.stdout = f
    print 'Intervals Passed: ' + str(n)
    sys.stdout = orig_stdout
    f.close()
    return 'Intervals Passed: ' + str(n)

@app.callback(dash.dependencies.Output('console-out', 
'srcDoc'),
    [dash.dependencies.Input('interval2', 'n_intervals')])
def update_output(n):
    file = open('out.txt', 'r')
    data=''
    lines = file.readlines()
    if lines.__len__()<=20:
        last_lines=lines
    else:
        last_lines = lines[-20:]
    for line in last_lines:
        data=data+line + '<BR>'
    file.close()
    return data

app.run_server(debug=False, port=8050)
0 голосов
/ 28 августа 2018

Один из возможных способов сделать это - предоставить его в качестве входных данных для свойства value текстовой области компонента Dash Core. Это должно работать, если это строка.

...