首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从其他cgi脚本调用cgi脚本

从其他cgi脚本调用cgi脚本
EN

Stack Overflow用户
提问于 2015-06-15 18:38:26
回答 1查看 1.1K关注 0票数 2

我发现了一个使用perl cgi的令人费解的行为--我猜--有一个完全正确的解释,但我找不到。关于堆栈溢出有this问题,但对我来说,它所描述的似乎失败了。情况:我有两个perl cgi脚本。其中之一(比方说script.pl)可以生成一个独立的网站,但也有一个参数--让我们称之为BARE --这样它就可以简单地输出非格式化的信息。

代码语言:javascript
复制
#!/usr/bin/perl                                                                                                                                                                                                                   

use strict;
use CGI;

my $cgi = new CGI;

unless ( defined $cgi->param('BARE') ) {
    print $cgi->header, $cgi->start_html,$cgi->h1('Hello World'), $cgi->end_html;
} else {
    print "Bare";
}

现在,我试图从另一个脚本(让我们称之为call_my_script.pl)调用这个脚本,并将其'BARE‘参数设置为本地脚本(因为它们位于同一个目录中)。

代码语言:javascript
复制
#!/usr/bin/perl                                                                                                                                                                                                                   

use strict;    
use CGI;

my $cgi = new CGI;

my $result = qx(./script.pl "BARE=1");

print $cgi->header,$cgi->start_html,$result,$cgi->end_html;

当从命令行运行此脚本时,我得到:

代码语言:javascript
复制
> ./call_my_script.pl 
Content-Type: text/html; charset=ISO-8859-1

<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
Bare
</body>
</html>

当我通过浏览器调用相同的脚本时,它会返回

代码语言:javascript
复制
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"><head><title>Untitled Document</title>
</head><body>Content-Type: text/html; charset=ISO-8859-1

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"><head><title>Untitled Document</title>
</head><body><h1>Hello World</h1></body></html></body></html>

因此,尽管我使用qx在本地调用第一个脚本,并且传递参数以获得原始格式,但在通过浏览器调用内容时,这一点并不受尊重。

我可能忽略了一些显而易见的东西,但我很想了解它是什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-15 18:58:09

CGI程序通常希望从环境变量QUERY_STRING中获取参数值。在命令行上传递参数值是一种调试工具,仅当程序从命令提示符运行时才有效。

你可以试试这样的东西

代码语言:javascript
复制
my $result = do {
    local $ENV{QUERY_STRING} = 'BARE=1';
    qx{./script.pl};
};
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30852615

复制
相关文章

相似问题

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