I am running my streamlit app on heroku and my procfile looks like:
web: sh setup.sh && streamlit run main.py
if I were to add && python script.py
Would it run that script? And, more importantly, is there a way for my streamlit app to access either the terminal, or a value from that script?
That script essentially gets data and stores it into a database and runs either off my local pc or a raspberry pi. I’d like to be able to monitor it from the UI I built. If I could run it all from streamlit it would be even better…
One possible way to have your Streamlit app use terminal to run scripts could be to use the subprocess library.
In the following example, I have a plot.R file that generates a plot.png image. From within the Streamlit app, I use subprocess to run the R script (plot.R) and use st.image to display the image.
import streamlit as st
import subprocess
from PIL import Image
process = subprocess.Popen(["Rscript", "plot.R"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
result = process.communicate()
image = Image.open('plot.png')
st.image(image)
Note: You may replace Rscript with bash if you want to run scripts via Bash.