首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Java执行hgweb.cgi

从Java执行hgweb.cgi
EN

Stack Overflow用户
提问于 2015-08-12 14:51:02
回答 2查看 338关注 0票数 1

我有Jetty服务器,我想从它运行hgweb.cgi:

代码语言:javascript
复制
ProcessBuilder builder = new ProcessBuilder("/MyPath/hgweb.cgi");

然后创建从请求到进程形成服务器响应的Process process = builder.start();和提要输入流。但是有一个问题:某种我无法理解的蟒蛇错误

代码语言:javascript
复制
File "<stdin>", line 1, in <module>
  File "mercurial/hgweb/wsgicgi.py", line 76, in launch
    content = application(environ, start_response)
  File "mercurial/hgweb/hgweb_mod.py", line 168, in __call__
    return self.run_wsgi(req)
  File "mercurial/hgweb/hgweb_mod.py", line 177, in run_wsgi
    req.url = req.env['SCRIPT_NAME']
KeyError: 'SCRIPT_NAME

这在命令行中也不起作用。我试图添加一个头部(SCRIPT_NAME,"")到已形成的hgweb.cgi请求中,但继续查看该消息。

在使用hgweb的每一个例子中,人们都使用apache / lighttpd / nginx服务器来运行hgweb.cgi,我不明白nodody为什么要做我想做的事情。

如果有人能帮助我配置hgweb.cgi,或者告诉我从java调用.cgi脚本的正确方法,我会非常高兴的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-12 17:21:52

我认为您找不到任何例子的原因是,对于每个请求,从Java调用Python可执行文件并不是真正的建议。又慢又不安全。考虑通过管道与命令服务器进行通信,后者重用单个process,并且正是为此目的而设计的。甚至还有Java客户端库。

如果您真的想尝试将mercurial作为一个独立于Java的进程调用,则不需要调用.cgi (或者wsgi,它看起来像您所得到的那样)。只需直接调用主Python可执行文件,提供命令行参数和stdin。

票数 1
EN

Stack Overflow用户

发布于 2015-08-17 21:48:47

要从java调用cgi,您不需要调用hgweb.cgi (我还发现了一件事:.cgi只不过是告诉您程序用途的一个符号而已。没有专门用于cgi或函数签名的语言,您必须注意)。我做了一个脚本hgweb.py

代码语言:javascript
复制
import os
from mercurial import demandimport
from mercurial.hgweb import hgweb, wsgicgi

repositoryPath = os.environ['REPOSITORY_PATH']

application = hgweb(repositoryPath) 
wsgicgi.launch(application)

很少有代码行调用该脚本:

代码语言:javascript
复制
ProcessBuilder process = new ProcessBuilder("python", "hgweb.py");

//pass all necessary environment variables
Map<String, String> env = process.environment();
env.put("variable", "value");
..
//then pick a directory where your process will run
process.directory(yourDirectory);
process.start();
/* then set up 
 * inputStream from request
 * outputStream for response
 * errorStream that is very useful if something went wrong
 * (you may forget to add an environment variable or something like that)
 */

我想这正是我所需要的。如果我发现任何问题-我会在这里写。感谢Ry4an的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31968653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档