2011年10月17日星期一

Re: [PerlChina] system 调用外部命令无法执行

一般都是环境变量PATH的问题
crontab或者cgi运行的时候,脚本和用户shell上的环境变量是不一样的

2011/10/17 Michael Zeng <galaxy2004@gmail.com>:
> system 命令正确执行是返回0的,否则是非0 ,
>
> 因此应该反过来写 :
> ! system( "XXXXcmd" ) or die "system error : $! "
>
>
> 2011/10/16 Yisong Zhen <zhenyisong@gmail.com>
>>
>> 找到原因了。
>> 谢谢Robin。
>> 我检查了httpd的error_log,上面显示是没发现我需要运行的程序-dialign。
>> 我估计还是环境变量没有设置好。
>> CGI在调用外部命令的时候没有调用apache运行用户的设置。这一点我不知道是否理解的对。
>> 所以我重新指定环境变量PATH和DIALIGN2_DIR(如果在本地执行,这些变量设置当然是对的,所以一开始并没有找到错误点!)
>>
>> 谢谢大家!
>>
>> 一松
>>
>> 2011/10/16 Robin Lee <robinlee.sysu@gmail.com>:
>> > 那就是没有错误。
>> > 你确定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 <zhenyisong@gmail.com>:
>> >> 没有什么额外的信息,只是说程序的第9行:
>> >> die cannot excute the proram: at temp.pl line 9.
>> >>
>> >> 一松
>> >>
>> >> 2011/10/15 Robin Lee <robinlee.sysu@gmail.com>:
>> >>> 改用
>> >>> die "cannot excute the proram: $!"
>> >>> 看看有什么系统错误信息
>> >>>
>> >>> 2011/10/15 Yisong Zhen <zhenyisong@gmail.com>:
>> >>>> 诸位,一个小问题:
>> >>>>
>> >>>> 该脚本运行在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 讨论组"论坛。
>> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
>> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
>> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>>
>
>
>
> --
> Yours Sincerely
> Zeng Hong
>
> --
> 您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
> 要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
> 要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>

--
如果觉得无聊,您不妨访问Google Reader消遣 https://www.google.com/reader/view
要尝试黑版本Google,请访问 http://tinyurl.com/yk3yp7j

--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

没有评论: