Hi all! I just typed this up for another user, and thought others may be interested.
Let’s say you want to make a Streamlit app that at some point runs a script called foo.sh
in a subprocess. That script prints out a bunch of stuff to the terminal, and you would like that output to show up in your Streamlit app.
Here’s a little function you can use for that:
import streamlit as st
import subprocess
def run_and_display_stdout(*cmd_with_args):
result = subprocess.Popen(cmd_with_args, stdout=subprocess.PIPE)
for line in iter(lambda: result.stdout.readline(), b""):
st.text(line.decode("utf-8"))
And here’s how you’d use it:
if st.button("Run"):
run_and_display_stdout("sh", "foo.sh", "arg1", arg2", "etc")
Note: you can use this to run any subprocess, not just shell scripts! For example, to show the output of ls -Al /
you would call:
run_and_display_stdout("ls", "-Al", "/")