Como executar subprocess no streamlit usando asyncio e exibir a saída

O exemplo a seguir executa um comando usando subprocess e exibe a saída em um aplicativo Streamlit. Ele usa asyncio para executar o subprocess de forma assíncrona e st.code() para exibir a saída.

Note que isso não fornece uma exibição em tempo real da saída. O subprocess é executado primeiro, e apenas após terminar, a saída é exibida no aplicativo Streamlit.

streamlit_subprocess_simple.py
import streamlit as st
import asyncio
import sys

async def run_subprocess():
    process = await asyncio.create_subprocess_exec(
        'ping', '-c', '10', '1.1.1.1',
        stdout=asyncio.subprocess.PIPE,
        stderr=asyncio.subprocess.PIPE,
    )

    stdout, stderr = await process.communicate()
    return stdout.decode(), stderr.decode()

async def main():
    st.write("Running subprocess...")
    stdout, stderr = await run_subprocess()

    st.write("Subprocess output:")
    st.code(stdout)

    st.write("Subprocess errors:")
    st.code(stderr)

if __name__ == '__main__':
    asyncio.run(main())

Check out similar posts by category: Streamlit Python