仅使用 javascript 或 django 调用 python 脚本

Call a python script using only javascript or django

我正在使用 splunk 及其仅适用于 javascript 和 Django 的框架。 我想打开一个外部文件并对其进行编辑,但是使用 javascript 是不可能的,而且我不确定是否使用 Django。如果有人知道,请告诉我怎么做。

所以,我想我可以从 javascript 或 Django 调用外部脚本,例如 python,它打开我的文件进行编辑,并将结果发送到我的 javascript页。

要编辑的文件存储在与我的 javascript 页面不同的子文件夹中,但它们都在同一个 splunk_app 文件夹中:

比如

home/splunk/apps/name/django_template/file_java.js
home/splunk/apps/name/django_template/script_that_edit.py
home/splunk/apps/name/lookup/file_to_edit.csv 

谢谢

Splunk 建立在 django 网络框架之上。您要做的是在服务器端执行代码。为此,您需要编写自己的视图

  1. 使用子进程
  2. 执行脚本python文件
  3. 将您的代码嵌入视图

在 vanilla django 中,假设您已将地址路由到 urls.py 中的正确视图,您的 views.py 函数应如下所示:https://docs.djangoproject.com/en/1.7/topics/http/views/

from django.shortcuts import render ## function to return a response and render a html tempalte

def myView(request):
    results = {} ## a dictionary to store your results/can be an array as well
    ## your function here and store your data in results
    with open('file.csv') as f:
        ...
        ... 

    return render(request, 'template.html', results ) 
    ## you will be returning a javascript object call results

在您的模板中,您可以通过 django 模板语法访问它们

{% for data in results %}
<p>{{ data }}</p>

或者您可以将其存储在变量中

var data = {{ results|safe }}

或者,splunk 提供了一些用于执行自定义视图的绑定。你可以看看http://dev.splunk.com/view/SP-CAAAEMP

原则上是一样的。 运行 函数中的代码,return 将其作为字典。

@render_to('your_app_name:pythondemo.html')
@login_required
def pythondemo_view(request):
    file_data = '' 
    with open('file.csv') as f:
       for line in f : 
           file_data += line

    return file_data ## 

这次您不需要 return 渲染,因为 splunk 装饰器会为您完成 @render_to

要执行子流程,请查看 http://pymotw.com/2/subprocess/

您可能 运行 遇到文件 read/write/execution 权限问题,因此我强烈建议您将代码放在请求中。

无论哪种方式,因为它是一个 python 脚本,您可以将您的代码包装在一个函数中,然后导入它。例如,

在yourscripts.py

#!/usr/bin/env python
def myFunction():
    return 1 + 1 

并在您的 view.py 中执行:

from youscripts import myFunction

如果您需要更多帮助,请告诉我。您可能需要相应地调整代码。如果要调用外部 python 脚本,请执行子进程命令

感谢您的帮助,我正在尝试使用 splunk 绑定,所以我已经获取了三个文件:urls、views 和 mypage.html 所以我添加了 url:

url(r'^mypage/$', 'mynewapp.views.myview', name='mypage'), 

渲染函数:

@render_to('mynewapp:mypage.html')
@login_required
def myview(request):
with open(csvfile, "r+") as lines:      
   for line in lines:
      file_data += line
service = request.service
return file_data

和 mypage.html django 代码:

{% for data in file_data %}
{{ data }}
{% endfor %}

但是有一点不对,但是我不明白是什么。

我将使用字典而不是 file_Data,但是如何使用来自 mypage.html 的子进程执行我的脚本 python 文件?

非常感谢您的帮助。