0

我有一个带有一个按钮的 html 文件。单击按钮时,将调用 javascript 函数“运行”:

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

run.py 只是试图运行一个 helloworld.exe 程序,该程序在终端中输出字符串“helloworld”,但没有任何反应,并且浏览器无限期地“等待 localhost”。

#!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 配置是否正常)。

我正在使用 wamp。

我想做的是一个更大的程序,它允许客户端连接到服务器,并与服务器端的程序“交互”。该程序已经在 c++ 中完成,不会被翻译成 php 或 javascript。

编辑:我一直在尝试使用以下功能:subprocess.Popen、subprocess.call 和 os.system。我还测试了代码来运行我在 apache/cgi-bin 文件夹中创建的 .exe 文件或在 c:\windows 中的写字板等可执行文件。当 python 脚本从终端运行时它总是成功,而从浏览器尝试时它永远不会工作。是否可能是因为我使用的服务器?我使用 wamp 的 apache,并将句子“AddHandler cgi-script .exe”添加到 httpd.conf 文件中。

4

2 回答 2

2

我确信它在本地不起作用。os.system 返回命令的退出代码,而不是它的输出。

您将需要使用 subprocess.Popen 和管道输出来读取输出。

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

此外,您的 CGI 脚本的输出不是有效的 HTTP 协议,并且取决于您的服务器,这可能会导致问题(一些服务器会清理脚本的输出,而另一些服务器则希望它们能够正确编写)。

对我来说,这个代码示例有效(在使用 weborf 作为服务器的 GNU/Linux 上,但它应该是相同的)。您可以尝试设置内容类型并发送 \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
于 2013-03-12T08:50:26.120 回答
0

一般来说,我的经验是,如果某些东西在本地工作并且当您在不同的服务器上安装所有相同的代码时不起作用,那么您正在查看权限问题。检查您网站上的访问者拥有的权限,并确保通过您的 Web 服务器的用户具有运行helloworld.exerun.py.

于 2013-03-06T11:25:42.567 回答