由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - perl cgi中调用C可执行程序为什么在html中不显示? (转载)
相关主题
perl + sas - the backtick operator - use specific user关于c++调用DOS 命令的问题,谢谢
Perl:如何处理这种hash 结构,急问一个关于perl的问题
简单的perl问题python, perl, C
想实现一个简单的script language,用perl好做么?[请教]文件输入
弱问perl写网页buffer问题问个在C++中调用perl的问题
50伪币:请教perl代码差错的问题!多谢啦!好像核心用C++的公司更成功
一个 perl 的 print 的初级问题[转载] servlet调用sql 访问oracle的问题
how to avoid security holes for perl CGI code using checkbo (转载)ios vs. android
相关话题的讨论汇总
话题: perl话题: env话题: 调用话题: 程序话题: cgi
进入Programming版参与讨论
1 (共1页)
o******1
发帖数: 1046
1
【 以下文字转载自 Linux 讨论区 】
发信人: outlook1 (outlook1), 信区: Linux
标 题: perl cgi中调用C可执行程序为什么在html中不显示?
发信站: BBS 未名空间站 (Sat Apr 12 02:23:45 2014, 美东)
我用perl写一个cgi的程序,其中调用了自己写的C程序(binary executable),需要
其stdout,所以用的是backticks。
如果单独运行perl cgi,结果正常,所有该print出来的全部出现,包括调用的C程序的
output。但是一旦从html里面连接到这个perl cgi,C程序ouput的部分,在网页中不显
示。
我试着把调用C程序的部分改成调用Linux系统程序,比如ls,cat等等,其output在网
页中就正常出现了。
我很困惑,大概知道是因为C程序的output没有被返回到perl process里面。但是在单
独执行perl程序的时候,调用的C就正常的输出到stdout了。又想了一想,可能是perl
和C共享了屏幕显示,所以我分辨不出来。但是在运行perl程序的时候,被调用的C的输
出没有返回到perl process,而是在另一个过程中,所以cgi创建的新网页就不显示了
。但是对于调用的Linux系统程序,为什么能正确的返回呢?
我半路出家,没学过操作系统,对于process,thread这些概念一知半解。大牛们能不
能指点一下,如何设置,才能让C程序的stdout返回到perl中?
多谢啦!
o******1
发帖数: 1046
2
上面说的太啰嗦了,我想了一下,其实问题就一句话:
如何把backticks中调用的自己写的C可执行程序的output返回到perl程序中?
大牛们指点一下吧!
p*****u
发帖数: 225
3
你的输出到了stderr 而不是stdout?
e*******o
发帖数: 4654
o******1
发帖数: 1046
5
多谢上面的大牛们的指点!费了一个晚上终于找出来毛病了。但是我还有个问题,大牛
们请继续帮忙。
1. 我的那个c的可执行文件是从oracle数据库里面retrieve东西,然后打印到stdout。
2. 我的问题其实不是C可执行文件的stdout没有返回到perl,而是C没有从数据库里面
retrieve到东西。所以先纠正一下之前我的错误,不管是用backticks,还是open
filehandle "C-proc |",都是返回了的。
3. 我是这样fix了原先的问题的:在perl文件中,加入了两行环境变量的设置,i.e. $
ENV{'LD_LIBRARY_PATH'} = '...'; 和$ENV{'ORACLE_HOME'} = '...'; 之后就没问题
了。
4. 那个C可执行文件在command line直接运行是没有问题的,也就是说
shell知道环境变量$LD_LIBRARY_PATH和$ORACLE_HOME的值。但是在perl文件的
backticks中执行,这两个环境变量是空白的。
5. 我的新问题是:在编程语言中,有没有一个简单的方法,一次性的把所有的shell环
境变量全部输入进来?
谢谢啦!
e*******o
发帖数: 4654
6
perl -E 'say for %ENV'
把这个结果导入到你的cgi script?
e*******o
发帖数: 4654
7
或者 parse bashrc file,把 环境变量 都提取出来? 我没搞过,仅供参考。
o******1
发帖数: 1046
8
多谢指点!
这个应该可以。就是要修饰一下perl -E 'say for %ENV'输出的格式。直接输出,就是
一行变量名,接着一行变量值,perl似乎不认。

【在 e*******o 的大作中提到】
: perl -E 'say for %ENV'
: 把这个结果导入到你的cgi script?

o******1
发帖数: 1046
9
这个似乎比较困难。。。

【在 e*******o 的大作中提到】
: 或者 parse bashrc file,把 环境变量 都提取出来? 我没搞过,仅供参考。
e*******o
发帖数: 4654
10
可以直接输出 %ENV hash.
我这个只是提醒你%ENV 的作用。
perl -MData::Dumper -E 'say Dumper(\%ENV)'

【在 o******1 的大作中提到】
: 多谢指点!
: 这个应该可以。就是要修饰一下perl -E 'say for %ENV'输出的格式。直接输出,就是
: 一行变量名,接着一行变量值,perl似乎不认。

e*******o
发帖数: 4654
11
如果不想手动搞,我觉得这也是个办法。
regex 匹配几下不就出来了么。

【在 o******1 的大作中提到】
: 这个似乎比较困难。。。
o******1
发帖数: 1046
12
多谢!
这么做似乎可以,就是在C程序中的参数个数(argc)数不对了。下面是perl程序中加
入的%ENV hash:
"
%ENV = (
'QTINC' => '/usr/lib64/qt-3.3/include',
'SSH_ASKPASS' => '/usr/libexec/openssh/gnome-ssh-askpass',
'ORACLE_HOME' => '/home/oracle/app/oracle/product/11.2.0/dbhome_1',
'CVS_RSH' => 'ssh',
'J2EE_HOME' => '/usr/local/jdk1.7.0_03',
...
);
"
当然了,%ENV中包含手动定义的几个环境变量,而且key和value都是正确的。
调用C程序的语句是:$ret = `C_prog $para`; C-prog包括绝对路径和文件名。如果
把上面定义%ENV的整个语句comment掉,还使用原先手动定义几个环境变量,结果就对
了。
看上去%ENV的定义挺正确的,不知道怎么就出现这么奇怪的argc数不对的错误?

【在 e*******o 的大作中提到】
: 可以直接输出 %ENV hash.
: 我这个只是提醒你%ENV 的作用。
: perl -MData::Dumper -E 'say Dumper(\%ENV)'

e*******o
发帖数: 4654
13
看一看你原来的%ENV 是啥。
你override原来的%ENV了。
应该merge 两个hash,不过要关注下冲突的问题。

1',

【在 o******1 的大作中提到】
: 多谢!
: 这么做似乎可以,就是在C程序中的参数个数(argc)数不对了。下面是perl程序中加
: 入的%ENV hash:
: "
: %ENV = (
: 'QTINC' => '/usr/lib64/qt-3.3/include',
: 'SSH_ASKPASS' => '/usr/libexec/openssh/gnome-ssh-askpass',
: 'ORACLE_HOME' => '/home/oracle/app/oracle/product/11.2.0/dbhome_1',
: 'CVS_RSH' => 'ssh',
: 'J2EE_HOME' => '/usr/local/jdk1.7.0_03',

1 (共1页)
进入Programming版参与讨论
相关主题
ios vs. android弱问perl写网页buffer问题
可执行程序问题50伪币:请教perl代码差错的问题!多谢啦!
Help -- How to output error messages to a file for scripts called by system calls???一个 perl 的 print 的初级问题
问一个关于ANSI C中system命令的问题how to avoid security holes for perl CGI code using checkbo (转载)
perl + sas - the backtick operator - use specific user关于c++调用DOS 命令的问题,谢谢
Perl:如何处理这种hash 结构,急问一个关于perl的问题
简单的perl问题python, perl, C
想实现一个简单的script language,用perl好做么?[请教]文件输入
相关话题的讨论汇总
话题: perl话题: env话题: 调用话题: 程序话题: cgi