簡體   English   中英

僅使用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綁定,因此我准備了以下三個文件: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網絡框架上。 您想要做的是在服務器端執行代碼。 為此,您將需要編寫自己的視圖,

  1. 使用子進程執行腳本python文件
  2. 在視圖中嵌入代碼

在香草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腳本,請執行子過程命令

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM