2015-11-28 7 views
0

Я на сервере dreamhost и имею HTML-код, который вызывает некоторый javascript при нажатии кнопки. Я пытаюсь вызвать скрипт python при нажатии этой кнопки.Вызов скрипта Python из Javascript

Прежде всего, насколько я знаю, на общем хосте я не могу использовать AJAX, поскольку он не поддерживается, поэтому мне нужно сделать это без AJAX. Сейчас я пытаюсь сделать XMLHttpRequest, который работает.

Я также понимаю, что делать XMLHttpRequest не лучший способ, так как файлы находятся на сервере, должен быть способ просто вызвать файл напрямую?

Так что если кто-то звонит, скажите мне, как позвонить ему напрямую или помочь мне исправить эту ошибку в консоли браузера, которая была бы замечательной. Спасибо за помощь

EDIT

У меня есть файл HTML, когда пользователь нажимает кнопку на этом файле он вызывает некоторые JavaScript, который находится в HTML-файл. Этот javascript в настоящее время делает POST-запрос, скрипту python, который находится на том же сервере и HTML-файле.

Что я хочу вместо того, чтобы отправлять запрос на файл python, который находится на сервере, я хочу просто вызвать python-файл из javascript, который запускается, когда кнопка нажата в файле HTML.

Оба файла HTML, который содержит javascript и файл python, находятся на одном сервере. И я не хочу, чтобы python запускался в браузере, я хочу, чтобы он работал в фоновом режиме на сервере.

Как я могу использовать Javascript для вызова этого файла python?

+0

Вы используете какой-либо промежуточного слоя, чтобы сделать на стороне сервера маршрутизации? Вы используете nodejs/express, python/(cherrypy, flask) или что-то еще вроде nginx/apache? Единственный способ, которым я знаю запускать «python» в браузере, - это использовать отдельную библиотеку, которая переводит python в javascript. – jmunsch

+0

@jm_____ Я не хочу, чтобы python запускался в браузере, я просто хочу, чтобы вас вызывали на сервере, знаете ли вы, что я получаю. Прямо сейчас я просто делаю это, хотя запрос POST, но файлы находятся на одном сервере, поэтому я хочу делать это без публикации, но мне не нужно его запускать в браузере. – spenf10

+0

Какие файлы находятся на одном сервере? можете ли вы включить пример в свой вопрос и указать, как у вас есть структурированные файлы? – jmunsch

ответ

2

Насколько я понимаю, ваш вопрос, что вы хотите сделать, называется «удаленным вызовом процедуры» или какой-то сервис-ориентированной архитектурой (SOA).

Вы находитесь на правильном пути при составлении запроса POST на сервер.

Вы можете настроить промежуточное программное обеспечение, например, флягу или черри, чтобы запустить сценарий при отправке запроса GET, PUT, POST .... И внутри контроллера промежуточного программного обеспечения вы можете вызвать свой скрипт.

В принципе, вы начали создавать RESTful api, и в наши дни это довольно стандартный способ запуска логики на бэкэнд.

Некоторые примеры различных структур для ведения URL-адрес маршрутизации:

Python:

NodeJs:

Также очень хорошо этот вопрос: JSON, REST, SOAP, WSDL, and SOA: How do they all link together

Другой способ, которым вы могли бы сделать это в браузере будет использовать сокеты, которые открывают соединение между клиентом и сервером.

Внутри javscript вы могли бы использовать socketio:

<script src='/socket.io/socket.io.js'></script> 
<script> 
    var socket = io(); 
    socket.connect('http://localhost:8000') 
    socket.emit('run_a_script_event', {arg1: 'hello', arg2: 'world'}); 
</script> 

А в вашем питона код, который вы могли бы использовать socketio клиент для питона (https://pypi.python.org/pypi/socketIO-client):

from your_module import thescript 
from socketIO_client import SocketIO, LoggingNamespace 

def run_a_script(*args): 
    print('arg1 and arg2', args) 
    thescript() 

socketIO = SocketIO('localhost', 8000, LoggingNamespace) 
socketIO.on('run_a_script_event', run_a_script) 

Похоже, есть также версия специально для колбы: https://flask-socketio.readthedocs.org/en/latest/

Или вы можете запустить python непосредственно в браузере, переведя его в javascript с помощью transpil эр:

Или вы можете использовать узел Javascript, чтобы породить дочерний процесс, который запускает сценарий Python:

Или вы можете импортировать скрипт python в узел, такой как:

Смежные вопросы