【问题标题】:How to stop a Python subprocess using a HTML form button?如何使用 HTML 表单按钮停止 Python 子进程?
【发布时间】:2012-11-14 13:15:21
【问题描述】:

我使用 Django 作为 Web 框架。在单个 HTML 页面上,我有一个表单,其目的是在我单击其提交按钮时启动 Python 子进程。表单的字段将填充将传递给该子流程的参数。

现在,我希望能够使用另一个表单按钮停止同一个子进程,最好是在同一个表单内。我怎样才能做到这一点?这可能并不难,但我目前不知道如何以简单而优雅的方式完成它。有任何想法吗?非常感谢!

【问题讨论】:

  • “使用”另一个表单按钮是什么意思?
  • 我很确定这将需要后端的各种网络服务器(处理来自表单的发布请求)......使用网络服务器(本地主机)是否适用于您的问题?
  • @JaspervandenBosch:我想要一个带有两个按钮的表单。一键启动子进程,一键停止同一个子进程。但是我假设我需要一个带有单个隐藏字段的第二个表单来完成停止子进程,对吧?
  • @ITNinja:这是我的硕士论文项目,所以使用Django内置的开发服务器就足够了。
  • @PeterStahl:或许你可以接受这个答案?

标签: python html django


【解决方案1】:

您必须在会话中保留对进程的引用。给每个提交按钮一个不同的“名称”属性,如果这个信号停止,终止子进程。

from subprocess import Popen
if 'start' in request.POST:
    p = Popen("do something")
    request.session['myprocess'] = p
elif 'stop' in request.POST:
    request.session['myprocess'].kill()

表格:

<form method="POST">
<input type="submit" name="start" value="start"/>
<input type="submit" name="stop" value="stop"/>
</form>

这是否有效取决于您的会话存储后端。

【讨论】:

  • 方法应该是POST,因为它对后端有明显的副作用。
  • 您知道哪个会话存储后端有效吗?当我单击停止子进程的按钮时,默认数据库后端给我OSError: [Errno 3] No such process
  • 我现在已经尝试了几个会话后端,但我总是得到一个OSError。怎么办?
  • @PeterStahl 我建议您发布一个新问题以及您编写的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 2012-11-04
  • 1970-01-01
  • 2016-02-01
  • 2018-08-02
相关资源
最近更新 更多