Redian新闻
>
perl cgi中调用C可执行程序为什么在html中不显示? (转载)
avatar
perl cgi中调用C可执行程序为什么在html中不显示? (转载)# Programming - 葵花宝典
m*u
1
最近现金有点周转不灵,想找个Balance transfer顶一下,请问哪位知道有没有什么卡
有好的offer,这年月 还有0$ 0 BT fee, 这样的好事吗? 多谢了!!!
avatar
b*e
2
求大家祝福。。。多谢。
avatar
A*4
3
比如30那个复活赛就是临时加的,其实最受益的就是刘心,为什么要临时加个复活赛,
之后再也没有
了。还有就是每次很关键的pk场合大多让媒体评委决定,刘心是在媒体评委中应该是会
得分很高的,其
他的就不好说了。不过刘心没有背景的人,应该不会有人因为别的保他,可能真的是欣
赏他,或者是有
噱头。话说真的会欣赏他的人大有人在,不仅熬军医,苏醒,李行亮,我觉得连主持人
在他很多歌唱过
后都说好,包括和炯,王汉。难道他真碰到伯乐了?
不过也许是我瞎猜,不过我感觉刘心觉得走到这里也够本了,本来没想到的,所以这会儿
感觉有点毫不顾
忌的,好像也有心理准备下场会被淘汰。
avatar
o*1
4
【 以下文字转载自 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中?
多谢啦!
avatar
D*0
6
Bless, baozi,please
avatar
S*n
7
我印象里复活赛不是临时加的,是小心心淘汰之前就确定有的。(待查)
avatar
o*1
8
上面说的太啰嗦了,我想了一下,其实问题就一句话:
如何把backticks中调用的自己写的C可执行程序的output返回到perl程序中?
大牛们指点一下吧!
avatar
i*d
9
0%的多
0$的没见

【在 m****u 的大作中提到】
: 最近现金有点周转不灵,想找个Balance transfer顶一下,请问哪位知道有没有什么卡
: 有好的offer,这年月 还有0$ 0 BT fee, 这样的好事吗? 多谢了!!!

avatar
j*3
10
祝福

【在 D*********0 的大作中提到】
: Bless, baozi,please
avatar
i*m
11
前5不是太矮就是长得惨,怎个一个没法怜悯的感觉,偶得天啊,芒果真是走到头了
avatar
p*u
12
你的输出到了stderr 而不是stdout?
avatar
w*l
13
bless.

【在 b**********e 的大作中提到】
: 求大家祝福。。。多谢。
avatar
J*e
14
刘心确实很好。
avatar
E*7
16
bless!
avatar
h*h
17
你想多了。
刘心在这个舞台就是受打压的小可怜,还记得有一场唱《风》,这歌我挺熟的,以前张
杰唱过,是刘心写的。刘心在台上唱的卖力,好像是巫启贤点评的,一番刻薄的点评后
居然来了一句,你没发现,你刚刚唱歌的时候其它几个评委都在聊天么?真是太NC太不
尊重选手了。
其它某些选手不疼不痒的哼哼几句,那些评委都能认真的说上一堆赞美的话,有的时候
我都觉得他们自己夸的自己舌头都要打结了。
avatar
o*1
18
多谢上面的大牛们的指点!费了一个晚上终于找出来毛病了。但是我还有个问题,大牛
们请继续帮忙。
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环
境变量全部输入进来?
谢谢啦!
avatar
g*c
19
bless you. You will soon get GC.
avatar
h*j
20
刘心如果能进3强 也算是myshow选手参加快男的最好成绩了

【在 h**h 的大作中提到】
: 你想多了。
: 刘心在这个舞台就是受打压的小可怜,还记得有一场唱《风》,这歌我挺熟的,以前张
: 杰唱过,是刘心写的。刘心在台上唱的卖力,好像是巫启贤点评的,一番刻薄的点评后
: 居然来了一句,你没发现,你刚刚唱歌的时候其它几个评委都在聊天么?真是太NC太不
: 尊重选手了。
: 其它某些选手不疼不痒的哼哼几句,那些评委都能认真的说上一堆赞美的话,有的时候
: 我都觉得他们自己夸的自己舌头都要打结了。

avatar
e*o
21
perl -E 'say for %ENV'
把这个结果导入到你的cgi script?
avatar
R*s
22
Bless ...
avatar
f*e
23
个人猜测,复活赛捞回来刘心,是因为芒果当时决定把赵雷扔了,只好另找一个创作型
的来代替。
avatar
e*o
24
或者 parse bashrc file,把 环境变量 都提取出来? 我没搞过,仅供参考。
avatar
p*7
25
bless!
avatar
o*1
26
多谢指点!
这个应该可以。就是要修饰一下perl -E 'say for %ENV'输出的格式。直接输出,就是
一行变量名,接着一行变量值,perl似乎不认。

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

avatar
H*e
27
bless
avatar
o*1
28
这个似乎比较困难。。。

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

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

avatar
w*0
31
Bless!
avatar
e*o
32
如果不想手动搞,我觉得这也是个办法。
regex 匹配几下不就出来了么。

【在 o******1 的大作中提到】
: 这个似乎比较困难。。。
avatar
l*y
33
应该会有帮助的。1-3周应该有回话。
avatar
o*1
34
多谢!
这么做似乎可以,就是在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)'

avatar
b*e
35
thank you guys for all the bless. :)
avatar
e*o
36
看一看你原来的%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',

avatar
A*y
37
bless
what happened?

【在 b**********e 的大作中提到】
: 求大家祝福。。。多谢。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。