Este exemplo usa asyncio para executar um subprocess e exibir sua saída ao vivo em uma interface web Streamlit (enquanto o comando ainda está em execução). Isso é útil para processos de longa duração onde você quer mostrar a saída conforme ela chega.
streamlit_subprocess_live_output.py
import streamlit as st
import asyncio
async def run_subprocess():
# Criar espaço reservado para saída ao vivo
output_placeholder = st.empty()
accumulated_output = []
process = await asyncio.create_subprocess_exec(
'ping', '-c', '10', '1.1.1.1',
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
)
# Ler o fluxo stdout
while True:
line = await process.stdout.readline()
if not line:
break
line = line.decode().strip()
accumulated_output.append(line)
# Atualizar exibição com toda a saída até agora
output_placeholder.code('\n'.join(accumulated_output))
# Obter qualquer saída e erros restantes
stdout, stderr = await process.communicate()
if stderr:
st.write("Subprocess errors:")
st.code(stderr.decode())
async def main():
st.write("Running subprocess...")
await run_subprocess()
if __name__ == '__main__':
asyncio.run(main())If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow
