仅使用javascript或django调用python脚本

时间:2015-02-18 10:14:30

标签: javascript python django splunk

我正在使用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 

谢谢

2 个答案:

答案 0 :(得分:1)

感谢您的帮助,我尝试使用splunk绑定,因此我提取了三个文件:urls,views和mypage.html 所以我添加了网址:

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中的子进程执行myscript python文件?

非常感谢你的帮助。

答案 1 :(得分:0)

Splunk建立在django Web框架上。您要做的是在服务器端执行代码。要做到这一点,你需要编写自己的视图

  1. 使用子流程执行脚本python文件
  2. 使用视图嵌入代码
  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

    原则上它是一样的。在函数中运行代码并将其作为字典返回。

    @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 ## 
    

    这次你不需要返回渲染,因为splunk装饰器会为你做@render_to

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

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

    要么明智,因为它是一个python脚本,你可以将你的代码包装在一个函数中,然后导入它。例如,

    在yourscripts.py 中

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

    并在你的view.py中执行:

    from youscripts import myFunction
    

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