我正在使用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
谢谢
答案 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框架上。您要做的是在服务器端执行代码。要做到这一点,你需要编写自己的视图
在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
from youscripts import myFunction
如果您需要更多帮助,请与我们联系。您可能需要相应地调整代码。如果要调用外部python脚本,请执行子进程命令