Я хочу, чтобы gradio показывал вывод из файлов в режиме реального времени.
Я создаю с помощью gradio программы, которые подключаются к коммутаторам через API и могут выполнять различные операции. Код работает нормально, но я хотел бы, чтобы выходной текстовый почтовый ящик «подавался» в режиме реального времени. Это означает, что я не хочу видеть результаты, когда весь цикл завершен. Я хочу, чтобы каждый раз, когда в файлах назначения появляется новая строка, их вывод отображался в текстовой области вывода.
import gradio as gr
import ipaddress
import requests
from requests.auth import HTTPBasicAuth
###SWITCH###
def switch_ver(ip):
ip_addr = ip.split()
for i in ip_addr:
ip_addr = list(ipaddress.ip_network(i))
try:
basic=HTTPBasicAuth('some','password')
login = requests.post('http://'+i+':80/rest/v7/login-sessions', auth=basic)
get_ver = requests.get('http://'+i+':80/rest/v7/system/status')
get_ver = get_ver.json()
get_ver = get_ver['firmware_version']
get_ver = get_ver
with open('switches_good_results.txt', 'a+') as sw:
results = 'Switch version for {} is: {} \n'.format(i, get_ver)
sw.write(results)
#return 'Switch version for {} is: {} \n'.format(i, get_ver)
except requests.exceptions.ConnectTimeout:
timeout = 'Could not connect to switch: '+i+' REQUEST TIMED OUT\n'
with open('switches_bad_results.txt', 'a+') as sw:
sw.write(timeout)
with open('switches_good_results.txt','r') as switches_bad, open('switches_bad_results.txt', 'r') as switches_good:
summary = switches_bad.read() + switches_good.read()
return (summary),['switches_good_results.txt', 'switches_bad_results.txt']
###IPBlockerK###
def block_ip(ip):
ip_addr = ip.split()
for i in ip_addr:
ip_addr = list(ipaddress.ip_network(i))
with open('fortigate.txt', 'a+') as f:
f.write('ping ' + i + '\n')
if i in f.read():
return i + ' ' ' is a duplicate!'
with open('fortigate.txt', 'r') as f:
return f.read()
with gr.Blocks(title = 'Switcher') as switches_ver:
gr.Markdown('Welcome to IPBlocker')
with gr.Tab(label = 'IPBlocker'):
with gr.Row():
ips_to_block = gr.Textbox(label = " ", lines = 10, PlaceHolder=('Please fill Ips to block'))
with gr.Tab(label = 'Switcher'):
with gr.Row():
with gr.Column():
switch_box = gr.Textbox(label = 'Switches', lines = 10, placeholder='Please fill switches IPs...')
show_ver = gr.Button('Show current switches version')
upgrade_ver = gr.Button('Upgrade selected switches')
output_textbox = gr.Textbox(label='Results',lines = 10)
with gr.Column():
output_file = gr.File(['switches_good_results.txt', 'switches_bad_results.txt'])
show_ver.click(fn=switch_ver, inputs = switch_box, outputs = [output_textbox, output_file])
switches_ver.launch()
Спасибо!