Spaces:
Sleeping
Sleeping
"""Talk to spaces VM via subprocess.check_output.""" | |
# pylint: disable=wrong-import-position | |
import sys | |
from pathlib import Path | |
if "." not in sys.path: | |
sys.path.insert(0, ".") | |
# import httpx | |
import subprocess as sp | |
from shlex import split | |
import pandas as pd | |
import matplotlib | |
import matplotlib.pyplot as plt | |
import seaborn as sns | |
# from textwrap import dedent | |
from inspect import cleandoc | |
import gradio as gr | |
import logzero | |
from logzero import logger | |
from gradiobee.seg_text import seg_text | |
matplotlib.use("Agg") # non-interactive for plt.savefig | |
sns.set() | |
sns.set_style("darkgrid") | |
logzero.loglevel() # default to 10 | |
# def greet(command): | |
def process(command): | |
"""Probe vm.""" | |
# single line: command | |
# logger.info("input:\n\t %s", command) | |
# print("print input:\n\t %s" % command) | |
# print("print input*:\n\t %s" % "*".join(command.splitlines())) | |
is_command = True | |
is_command = command.strip().splitlines().__len__() < 2 and len(command.strip()) < 100 | |
if is_command: | |
try: | |
# out = sp.check_output(split(command), encoding="utf8", stderr=STDOUT) | |
proc = sp.Popen( | |
split(command), encoding="utf8", stdout=-1, stderr=-1 | |
) # sp.PIPE: -1 | |
out, err = proc.communicate() | |
success = True | |
except Exception as e: | |
out, err = "", str(e) | |
success = False | |
if success: | |
out = "\n".join( | |
( | |
out, | |
err, | |
) | |
).strip() | |
if not out: | |
out = "No output, that's all we know." | |
return out, None | |
# quick test altair altair-save tooltip | |
# from PIL import Image | |
# import altair as alt | |
# from altair_saver import save | |
# alt.renderers.enable('altair_saver', fmts=['vega-lite', 'png']) | |
df_ = pd.DataFrame(data={'x': [1, 2], 'y': [3, 4], "cos": [0.1, 0.5]}) | |
# chart_df = alt.Chart(df_).mark_circle(size=60).encode( | |
# x='x', | |
# y='y', | |
# color='cos', | |
# tooltip=['x', 'y', 'cos', ] | |
# ) | |
# .interactive() | |
# save(chart_df, "chart_df.html") | |
# chart_df_html = Path("chart_df.html").read_text("utf") | |
# save(chart_df, "chart_df.png") | |
# chart_df_png = Path("chart_df.png").read_bytes() | |
# chart_df_png = Image.open("chart_df.png") | |
# chart_df_png = "chart_df.png" | |
# scatter_plot.save('simple_scatter_plot_with_altairchart.html') | |
# chart_df.save("chart_df.html") # does not work, constains js | |
# chart_df_html = Path("chart_df.html").read_text("utf") | |
# chart_df.save("chart_df.png") # | |
# chart_df_png = "chart_df.png" | |
# not is_command or not flag: text, do seg_text | |
_ = "\n\n".join(seg_text(command.strip())) | |
logger.debug(_) | |
# logger.debug(chart_df_html) | |
# print(_) | |
# print(chart_df_html) | |
# _ = seg_text(command.strip()) | |
_ = cleandoc( | |
f"""seg_text output (segmented sents): | |
{_} | |
""" | |
).strip() | |
# return _, chart_df_html | |
plt.figure() | |
sns.scatterplot(data=df_, x='x', y='y') | |
Path("img").mkdir(exist_ok=True) | |
plt.savefig("img/df.png") | |
plt.close() | |
df_png = "img/df.png" | |
# return _, chart_df_png | |
return _, df_png | |
iface = gr.Interface( | |
# fn=greet, | |
# inputs="text", | |
fn=process, | |
# inputs="text", | |
inputs=gr.inputs.Textbox( | |
lines=5, | |
placeholder="Type or paste input here then click 'Submit'", | |
default="python -m site", | |
label="command or multiline text", | |
), | |
# outputs="text", | |
# outputs=["text",], | |
# outputs=["text", "html"], | |
outputs=[ | |
"text", | |
gr.outputs.Image("auto"), | |
], | |
examples=[ | |
"cat /proc/version", | |
"free # show free memory", | |
"uname -m", | |
"df -h .", | |
"cat /proc/cpuinfo", | |
"""python -c "from psutil import virtual_memory; print(virtual_memory())" """, | |
], | |
title="probe the system", | |
description="Talk to the system via subprocess.check_output ", | |
layout="vertical", | |
) | |
iface.launch(share=True, debug=True) | |
# iface.launch() |