【问题标题】:How to run shell command from javascript client-side?如何从 javascript 客户端运行 shell 命令?
【发布时间】:2022-01-26 19:43:55
【问题描述】:

我有最简单的程序:1个HTML文件、1个CSS文件和1个JS文件,直接在我自己的电脑上运行。而我想要做的是,当您按下程序中的一个按钮 时,一个shell 命令 (Windows) 会直接在计算机上运行。这将生成文件,然后将在程序内部进一步使用。

看来你不能单独通过 JS 访问你的本地文件,所以我安装了 NodeJS(这对我来说是全新的)。但我仍然无法让它以这种方式工作。

我最终让 NodeJS 以 JS 和 CSS 文件也可以工作的方式托管 HTML 页面的唯一方法是复制我在这里得到的代码:https://stackoverflow.com/a/13635318。 (我称之为 server.js)。

但我仍然无法找到在客户端运行该 shell 命令时调用 server.js 的方法。一些帖子建议为此使用 AJAX,例如 https://stackoverflow.com/a/53897335,但我无法在 server.js 中找到任何方法来成功捕获它。

【问题讨论】:

  • "如何从 javascript 客户端运行 shell 命令?" --> 你不能。正如您所发现的,您将需要 NodeJS 或类似工具来实现您的目标。如果您还有我在此处回答的问题以外的问题,请修改此问题或提出新问题。
  • 您可能想问问自己,您是否真的需要一个 Web 应用程序 (html+css+js) 来实现您的目标,如果您需要在计算机上运行 shell 为什么不使用带有运行外壳的按钮?只是一个想法,考虑一下
  • 也许使用electron。看起来这可以工作。
  • @Alisson 这只是程序的一小部分。我需要它成为所有其余部分的网络应用程序。

标签: javascript node.js shell


【解决方案1】:

我想出了另一种迂回的方式:

使用 Django,您可以轻松地将 JS 和 Python 结合起来,Python 可以更轻松地运行 shell 命令。


如果有人想要确切的代码:

Python (views.py):

import subprocess

def home(request):
    if request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest':
        subprocess.call(["ls", "-l"])
    return render(request, 'index.html')

Javascript:

function toView() {
    var csrftoken = $("[name=csrfmiddlewaretoken]").val();
    $.ajax({
        method: 'POST',
        url: '',
        headers:{
            "X-CSRFToken": csrftoken
        },
        data: {},
        success: function (data) {
             alert("it worked!");
        },
        error: function (data) {
             alert("it didnt work");
        }
    });
}

HTML (index.html):

        <form method="post">
             {% csrf_token %}
            <button type="button" onclick="toView()">Do x</button>
        </form>

【讨论】:

  • 是的,这是一种方式。更一般地,您制作了一个在后端具有处理程序的表单。在后端,你可以做任何你喜欢的事情。就像写入数据库或调用 shell 命令或这些的组合......欢迎来到后端编程。请查看owasp.org 和其他资源以确保其安全(例如添加密码、SSL 等,以免任何人调用启动操作)
猜你喜欢
  • 2010-10-30
  • 1970-01-01
  • 2014-01-08
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多