[英]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綁定,因此我准備了以下三個文件:url,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中的子進程執行myscript python文件?
非常感謝你的幫助。
Splunk建立在django網絡框架上。 您想要做的是在服務器端執行代碼。 為此,您將需要編寫自己的視圖,
在香草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腳本,因此您只需將代碼包裝在一個函數中,然后將其導入即可。 例如,
#!/usr/bin/env python
def myFunction():
return 1 + 1
from youscripts import myFunction
讓我知道您是否需要更多幫助。 您可能需要相應地調整代碼。 如果要調用外部python腳本,請執行子過程命令
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.