system 命令正确执行是返回0的,否则是非0 , 因此应该反过来写 : ! system( "XXXXcmd" ) or die "system error : $! "
2011/10/16 Yisong Zhen <[email protected]> > 找到原因了。 > 谢谢Robin。 > 我检查了httpd的error_log,上面显示是没发现我需要运行的程序-dialign。 > 我估计还是环境变量没有设置好。 > CGI在调用外部命令的时候没有调用apache运行用户的设置。这一点我不知道是否理解的对。 > 所以我重新指定环境变量PATH和DIALIGN2_DIR(如果在本地执行,这些变量设置当然是对的,所以一开始并没有找到错误点!) > > 谢谢大家! > > 一松 > > 2011/10/16 Robin Lee <[email protected]>: > > 那就是没有错误。 > > 你确定system里的命令没有被执行? > > 试一下 system("echo 'xxx'") ? > > > > 另外,应该判断 system 返回值是否为0来判断命令是否正确执行: > > system("xxx") == 0 or die; > > 而不是: > > system("xxx") or die; > > > > 另外,system的返回值并不是命令结束返回值,返回值是 ($? >> 8)。详见 perldoc -v '$?' 以及 perldoc -f > system。 > > > > 2011/10/15 Yisong Zhen <[email protected]>: > >> 没有什么额外的信息,只是说程序的第9行: > >> die cannot excute the proram: at temp.pl line 9. > >> > >> 一松 > >> > >> 2011/10/15 Robin Lee <[email protected]>: > >>> 改用 > >>> die "cannot excute the proram: $!" > >>> 看看有什么系统错误信息 > >>> > >>> 2011/10/15 Yisong Zhen <[email protected]>: > >>>> 诸位,一个小问题: > >>>> > >>>> 该脚本运行在Fedora15上面:但是无法执行system里面的程序。但是,程序不用借助perl外部调用可以正确执行。 > >>>> 即,我直接在linux命令行敲入:dialign2-2 -fn promoter.out -n promoter.seq > >>>> 可以执行程序。 > >>>> > >>>> 起初我觉得是路径不对,我输出了路径,发现是正确的,而且所需的DIALIGN2_DIR变量也设置正确。 > >>>> 代码如下: > >>>> > >>>> #!/usr/bin/perl > >>>> > >>>> #my $dir = $ENV{'DIALIGN2_DIR'}; > >>>> #my $path = $ENV{'PATH'}; > >>>> > >>>> > >>>> my $commandLine = "dialign2-2 -fn promoter.out -n promoter.seq"; > >>>> my $returnValue = system($commandLine) || die "cannot excute the > proram"; > >>>> > >>>> 非常感谢能有人出手帮助。 > >>>> > >>>> 甄一松 > >> > >> -- > > -- > 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。 > 要向此网上论坛发帖,请发送电子邮件至 [email protected]。 > 要取消订阅此网上论坛,请发送电子邮件至 [email protected]。 > 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。 > > -- Yours Sincerely Zeng Hong -- 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。 要向此网上论坛发帖,请发送电子邮件至 [email protected]。 要取消订阅此网上论坛,请发送电子邮件至 [email protected]。 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
