gradio

文章介绍了如何使用gradio创建一个界面,通过点击按钮在后台启动Python脚本(a.py和b.py),获取新命令的PID,并展示子进程的输出。同时讨论了如何使用subprocess的Popen函数和Linux终端中父进程与子进程的关系,以及在终止时只杀死子进程而非主进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gradio启动cmd并尝试kill

import gradio as gr
import subprocess

all_pid = []

def get_all_pid():
    return str(all_pid)

def train_0():
    proc = subprocess.Popen(['python', 'a.py'], 
                            cwd='py_folder_path')
    all_pid.append(proc.pid)

def train_1():
    proc = subprocess.Popen(['python', 'b.py'],
                            cwd='py_folder_path')
    all_pid.append(proc.pid)
    
css = """
#warning {background-color: #FFCCCB}
.feedback textarea {font-size: 24px !important}
"""
# 0. 设置整个gradio项目block
gradio_project = gr.Blocks(css=css)
train_button_0 = gr.Button(value="train_0")
train_botton_1 = gr.Button(value="trian_1")
update_pid_button = gr.Button(value="更新存在的任务pid")

train_all_pid_gr = gr.Textbox(label="所有已存在的pid")
with gradio_project:
    train_button_0.render()
    train_button_0.click(fn=train_0, inputs=None, outputs=None)
    
    train_botton_1.render()
    train_botton_1.click(fn=train_1, inputs=None, outputs=None)
    
    update_pid_button.render()
    train_all_pid_gr.render()
    update_pid_button.click(fn=get_all_pid, inputs=None, outputs=[train_all_pid_gr])   
gradio_project.queue(concurrency_count=4, max_size=3).launch(share=True,server_port=6093)

在这里尝试使用gradio,按钮点击时在后台启动一个新的cmd,并执行特定命令,并返回新的cmd的pid,在窗口上,会回显后台cmd的输出,
以新的cmd窗口启动命令时,可以使用多线程读取数据,在kill时,只需要pkill -P 父进程的pid,就会将所有子进程都杀掉,并保留主进程的cmd窗口。
更详细关于父进程和子进程的关系可参考此链接
Linux终端与进程的关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值