2013-03-06 3 views
0

У меня есть html-файл с одной кнопкой. Когда кнопка нажата, Javascript функция «запуска» называется:Запустите файл .exe с помощью скрипта CGI python

function run() { 
      window.open("http://localhost/cgi-bin/run.py", "_self"); 
     } 

run.py просто пытается запустить HelloWorld.exe программу, которая выводит на терминал строку «HelloWorld», но ничего не происходит , а браузер «ожидает локального хоста» бесконечно.

#!python 
import sys, string, os, cgitb 

cgitb.enable() 
os.system("helloworld.exe") 

Я попытался HelloWorld.exe в одиночку, и он работает, я запустить run.py на терминале, и он работал, а также я испытал на браузере испытательном полигоне http://localhost/cgi-bin/helloworld.py, и он работал отлично (helloworld.py - это еще один скрипт, чтобы проверить, настроен ли мой apache OK).

Я использую wamp.

То, что я пытаюсь сделать, - это большая программа, которая позволяет клиенту подключаться к серверу и «взаимодействовать» с программой на стороне сервера. Программа уже выполнена в C++ и не будет переведена на php или javascript.

EDIT: Я пытался выполнять функции: subprocess.Popen, subprocess.call и os.system. Я также проверил код для запуска .exe-файлов, созданных мной, живущих в папке apache/cgi-bin или исполняемых файлов, таких как wordpad, живущих в c: \ windows. И всегда удается, когда скрипт python запускается с терминала, и он никогда не работает при попытке браузера. Возможно ли, что это из-за сервера, который я использую? Я использую apache из wamp и добавил предложение «AddHandler cgi-script .exe» в файл httpd.conf.

+1

В вашем Javascript-коде вам, кажется, не хватает кавычки перед запятой. – cyroxx

+0

'http: // localhost/cgi-bin/helloworld.py' или' http: // localhost/cgi-bin/run.py'? – Evert

+0

спасибо, но у меня была ошибка с котировкой, и я не очень хорошо объяснил, что я могу сказать с helloworld.py. думаю, теперь исправлено :) – toni

ответ

2

Уверен, что он не работает локально. os.system возвращает вам код выхода команды, а не ее вывод.

Вам нужно будет использовать подпроцесс. Подготовьте и конвейерьте выход для чтения вывода.

import subprocess 
p = subprocess.Popen("whatever.exe",stdout=subprocess.PIPE) 
print p.stdout.read() 
p.wait() 

Кроме того, выход из вашего CGI скрипта не действует протокол HTTP, и в зависимости от вашего сервера, которые могут быть причиной проблем (некоторые сервера дезинфицировать вывод скриптов, некоторые другие ожидают, что они будут написаны правильно) ,

Мне этот пример кода работает (на GNU/Linux с использованием weborf как сервера, но он должен быть тем же). Вы можете попробовать установить тип контента и отправить окончательную последовательность \ r \ n \ r \ n. Ожидается, что серверы не отправят это, потому что скрипт CGI может захотеть добавить еще несколько HTTP-заголовков.

#!/usr/bin/env python 

import cgitb 
import subprocess 
import sys 

cgitb.enable() 

sys.stdout.write("Content-type: text/plain\r\n\r\n") 

p = subprocess.Popen("/usr/games/fortune",stdout=subprocess.PIPE) 
data = p.stdout.read() 
p.wait() 

print data 
+0

спасибо за ваш ответ, но он все равно не работает. – toni

+0

Я думаю, что и ваша первая строка может быть проблемой, если команда «python» не находится в пути, когда сервер запускает эту вещь. – LtWorf

+0

Я использую windows7, wamp и chrome/IE. Чтобы избежать «проблем с косой чертой» при написании пути к файлу exe, я использую os.path.normpath («c:/wamp /.../ cgi-bin/helloworld.exe). На данный момент у меня есть только я смог запустить run.py при вызове его из терминала cygwin. – toni

0

В целом, мой опыт в том, что если что-то работает локально и не работает, когда вы устанавливаете один и тот же код на другом сервере, вы смотрите на проблему с разрешениями. Проверьте разрешения, которые есть у посетителей вашего сайта, и убедитесь, что пользователь, проходящий через ваш веб-сервер, имеет правильные разрешения для запуска helloworld.exe и run.py.

+0

Я попытался дать права на чтение, запись и выполнение сценария, файла .exe и папки, содержащей их (/ cgi-bin), но ничего не изменилось. – toni

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