Wie man einen Subprocess in Streamlit mit asyncio ausführt und die Ausgabe anzeigt

Das folgende Beispiel führt einen Befehl mit subprocess aus und zeigt die Ausgabe in einer Streamlit-App an. Es verwendet asyncio, um den Subprocess asynchron auszuführen, und st.code(), um die Ausgabe anzuzeigen.

Beachten Sie, dass dies keine Echtzeitanzeige der Ausgabe bietet. Der Subprocess wird zuerst ausgeführt, und erst nach Beendigung wird die Ausgabe in der Streamlit-App angezeigt.

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