免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3340 | 回复: 6
打印 上一主题 下一主题

system()问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-04 19:35 |只看该作者 |倒序浏览
我想在一个pl文件1中 后台执行 另外一个pl文件2:
      system("perl /home/ssnw/script.pl $argv");
script.pl的作用就是生成两个txt文件。
$argv 是script.pl文件所需的参数。
我在命令台执行pl1的文件时候可以调用到pl2,但是在叶面上运行的时候却不能!
请指教!

论坛徽章:
0
2 [报告]
发表于 2006-04-04 20:52 |只看该作者
原帖由 luol_001 于 2006-4-4 19:35 发表
我想在一个pl文件1中 后台执行 另外一个pl文件2:
      system("perl /home/ssnw/script.pl $argv");
script.pl的作用就是生成两个txt文件。
$argv 是script.pl文件所需的参数。
我在命令台执行pl ...


通常是权限的问题,cgi运行的用户根本不能生成你那2个文件,请看看error_log日志。

论坛徽章:
0
3 [报告]
发表于 2006-04-04 21:15 |只看该作者
open(DATA,">".$dir_log."test.txt");
print DATA $head;
     foreach(@temp){
        print DATA "$_";
     }
print DATA $end;
close(DATA);

print() on closed filehandle DATA at /home/ssnw/script.pl line 41.
为什么会报这样的错误,仙子姐姐?

[ 本帖最后由 luol_001 于 2006-4-4 21:17 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-04-04 21:21 |只看该作者
open(DATA, ">", "${dir_log}test.txt") or die "can't open file:$!";

这样写试试?

论坛徽章:
0
5 [报告]
发表于 2006-04-04 21:37 |只看该作者
还是不行,写成绝对路径还是抱:
print() on closed filehandle F at /home/ssnw/script.pl line 41.



论坛徽章:
0
6 [报告]
发表于 2006-04-04 21:44 |只看该作者
原帖由 luol_001 于 2006-4-4 21:37 发表
还是不行,写成绝对路径还是抱:
print() on closed filehandle F at /home/ssnw/script.pl line 41.






如果可以的话,将整个相关代码都贴出来,可以看一下。我觉得你的那个错误也许不是你现在这个部分代码的问题!

论坛徽章:
0
7 [报告]
发表于 2006-04-05 09:08 |只看该作者
第一个cgi文件调用了这个方法:
sub dispatch_search_tool{
        my $self = shift;

        my @index_word  = $self->cgi->param('index_word');      #用来检索的文字列
        my $charset_set = $self->cgi->param('charset_set');        #用来设置的字体编码

        # 同じデータの入力チェック. 相同输入情况的检查
        foreach my $item (@index_word){
                my @same = grep { $item == $_ } @index_word;

                my $flag;
                # 入力不正処理. 不正确的处理
                if(@same > 1){
                        $flag = 'err';
                        last;

                # 入力正しい処理. 输入正确的处理
                }else{
                        $flag = 'searching';
                        my $argv = join(' ', @index_word)." $charset_set";
                        system( "perl "."script.pl $argv");                }
        }

}
script.pl文件:

#! /usr/local/bin/perl -w

use strict;
use UPS::String::Check;
use Jcode;
use UPS::DateTimeLite;

my @param = split(/ /, $ARGV[0]);
my $code = $ARGV[1];
#my @param = ('hoge');
#my $code = 'EUC_JP';

#my $jcode = Jcode->new('');

open(DATA,"<","/home/ssnw/perl-lib/SSNW/Waf/Contents/Tools/MailSearch/Conf.txt");
my @dir = <DATA>;
my $dir_log = shift @dir;
my $dir_result = shift @dir;
close(DATA);

$dir_log = $2 if($dir_log =~ /^(DIRECTORY_LOG)=(.*)$/);
$dir_result = $2 if($dir_result =~ /^(DIRECTORY_RESULT)=(.*)$/);

my $time = UPS::DateTimeLite->new->format('%Y%M%D%H%M%S');

my $temp;
my $flag = 1;

open(F,">>","/home/ssnw/tools/htdocs/grep_data/".$time.".txt");
foreach(@param){
        if($_){
#                $_ = $jcode->set($_,'sjis')->euc();
                $_ =~s/\"/\\/g;
                $_ = '"'.$_.'"';
                if($flag){
                        $temp = "grep $_ /home/ssnw/tools/htdocs/grep_data/log.txt";
                        $flag = 0;
                } else {
                        $temp .= " | grep $_";
                }
                print F "$_ ";
        }
}

print F "\n";
close(F);

###############################

open(D,"<","/home/ssnw/tools/htdocs/grep_data/log.txt");
my @temp = <D>;
my $head = shift @temp;
my $end = pop @temp;
close(D);

open(A,">","/home/ssnw/tools/htdocs/grep_data/log.txt");
foreach(@temp){
        print A "$_";
}
close(A);

###############################

my @record = qx($temp);

open(T,">","/home/ssnw/tools/htdocs/grep_data/log.txt");
print T "$head";
foreach(@temp){
        print T "$_";
}
print T "$end";
close(T);

###############################

my @mail_contents;
my $cnt = 1;
my $strck = UPS::String::Check->new;

foreach(@record){

        my ($date_time, $address, $subject, $msg) = split(/\t/,$_);
        #        DateTime
        if ($date_time =~ /^(\[)(.*)(\])$/) {

                if($strck->null($2)){
                        #print "DateTime is Empty at xxx.log line $cnt.\n";
                }
                $date_time = $2;
        }
        #        Subject
        if ($subject =~ /^(Subject):(.*)$/) {

                if($strck->null($2)){
                        #print "$1 is Empty at xxx.log line $cnt.\n";
                }
                unless($strck->sjis($2)){
                        #print "perhaps $1 is EUC at xxx.log line $cnt.\n";
                }
                $subject = $2;
        }
        #        Message
        if ($msg =~ /^(Message):(.*)$/) {

                if ($strck->null($2)){
                        #print "$1 is Empty at xxx.log line $cnt.\n";
                }
                unless($strck->sjis($2)){
                        #print "perhaps $1 is EUC at xxx.log line $cnt.\n";
                }
                $msg = $2;
        }

        $cnt++;
        push(@mail_contents, $date_time."\t".$address."\t".$subject."\t".$msg."\n");
}

open(H,">>","/home/ssnw/tools/htdocs/grep_data/".$time.".txt");
foreach(@mail_contents){
        print H "$_";
}
close(H);

#print "OK.\n";

请指教,谢谢!:em02::em02:

[ 本帖最后由 luol_001 于 2006-4-5 09:12 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP