perl cgi中调用C可执行程序为什么在html中不显示? (转载)# Programming - 葵花宝典m*u2014-04-12 07:041 楼最近现金有点周转不灵,想找个Balance transfer顶一下,请问哪位知道有没有什么卡有好的offer,这年月 还有0$ 0 BT fee, 这样的好事吗? 多谢了!!!
A*42014-04-12 07:043 楼比如30那个复活赛就是临时加的,其实最受益的就是刘心,为什么要临时加个复活赛,之后再也没有了。还有就是每次很关键的pk场合大多让媒体评委决定,刘心是在媒体评委中应该是会得分很高的,其他的就不好说了。不过刘心没有背景的人,应该不会有人因为别的保他,可能真的是欣赏他,或者是有噱头。话说真的会欣赏他的人大有人在,不仅熬军医,苏醒,李行亮,我觉得连主持人在他很多歌唱过后都说好,包括和炯,王汉。难道他真碰到伯乐了?不过也许是我瞎猜,不过我感觉刘心觉得走到这里也够本了,本来没想到的,所以这会儿感觉有点毫不顾忌的,好像也有心理准备下场会被淘汰。
o*12014-04-12 07:044 楼【 以下文字转载自 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中?多谢啦!
d*82014-04-12 07:045 楼http://www.fatwallet.com/forums/topic_view.php?catid=52&threadid=902958&start=0
i*d2014-04-12 07:049 楼0%的多0$的没见【在 m****u 的大作中提到】: 最近现金有点周转不灵,想找个Balance transfer顶一下,请问哪位知道有没有什么卡: 有好的offer,这年月 还有0$ 0 BT fee, 这样的好事吗? 多谢了!!!
e*o2014-04-12 07:0415 楼http://www.perlmonks.org/?node_id=1028584http://www.perlmonks.org/?node_id=923106看来是个老问题了。
h*h2014-04-12 07:0417 楼你想多了。刘心在这个舞台就是受打压的小可怜,还记得有一场唱《风》,这歌我挺熟的,以前张杰唱过,是刘心写的。刘心在台上唱的卖力,好像是巫启贤点评的,一番刻薄的点评后居然来了一句,你没发现,你刚刚唱歌的时候其它几个评委都在聊天么?真是太NC太不尊重选手了。其它某些选手不疼不痒的哼哼几句,那些评委都能认真的说上一堆赞美的话,有的时候我都觉得他们自己夸的自己舌头都要打结了。
o*12014-04-12 07:0418 楼多谢上面的大牛们的指点!费了一个晚上终于找出来毛病了。但是我还有个问题,大牛们请继续帮忙。1. 我的那个c的可执行文件是从oracle数据库里面retrieve东西,然后打印到stdout。2. 我的问题其实不是C可执行文件的stdout没有返回到perl,而是C没有从数据库里面retrieve到东西。所以先纠正一下之前我的错误,不管是用backticks,还是openfilehandle "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环境变量全部输入进来?谢谢啦!
h*j2014-04-12 07:0420 楼刘心如果能进3强 也算是myshow选手参加快男的最好成绩了【在 h**h 的大作中提到】: 你想多了。: 刘心在这个舞台就是受打压的小可怜,还记得有一场唱《风》,这歌我挺熟的,以前张: 杰唱过,是刘心写的。刘心在台上唱的卖力,好像是巫启贤点评的,一番刻薄的点评后: 居然来了一句,你没发现,你刚刚唱歌的时候其它几个评委都在聊天么?真是太NC太不: 尊重选手了。: 其它某些选手不疼不痒的哼哼几句,那些评委都能认真的说上一堆赞美的话,有的时候: 我都觉得他们自己夸的自己舌头都要打结了。
o*12014-04-12 07:0426 楼多谢指点!这个应该可以。就是要修饰一下perl -E 'say for %ENV'输出的格式。直接输出,就是一行变量名,接着一行变量值,perl似乎不认。【在 e*******o 的大作中提到】: perl -E 'say for %ENV': 把这个结果导入到你的cgi script?
o*12014-04-12 07:0428 楼这个似乎比较困难。。。【在 e*******o 的大作中提到】: 或者 parse bashrc file,把 环境变量 都提取出来? 我没搞过,仅供参考。
e*o2014-04-12 07:0430 楼可以直接输出 %ENV hash.我这个只是提醒你%ENV 的作用。perl -MData::Dumper -E 'say Dumper(\%ENV)'【在 o******1 的大作中提到】: 多谢指点!: 这个应该可以。就是要修饰一下perl -E 'say for %ENV'输出的格式。直接输出,就是: 一行变量名,接着一行变量值,perl似乎不认。
o*12014-04-12 07:0434 楼多谢!这么做似乎可以,就是在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*o2014-04-12 07:0436 楼看一看你原来的%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',