首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl调用perl

Perl调用perl
EN

Stack Overflow用户
提问于 2014-08-04 13:50:02
回答 2查看 89关注 0票数 0

我对perl有权限错误。

perl脚本正在使用配置文件调用另一个脚本。executeParsers.pl -->读取配置文件->调用parser1.pl

只有当配置文件中有2行时,才会出现错误。文件: ssh.conf*

代码语言:javascript
复制
OBS,9 Cegetel,Altitude;sh ip int;shipint;parser1.pl
OBS,9 Cegetel,Altitude;sh int status;shintstatus;parser2.pl

文件: executeParsers.pl

代码语言:javascript
复制
$DIR="/tech/gtr/scripts/osm/environnement_qualif/scan-rh2";

open(SSHCONFIG, "$DIR/bin/ssh.conf");
while (<SSHCONFIG>) {
    $ifname = (split)[0];
    my @status = split /;/;
    for (@status) {
            print ("$_ \n");
        }
    #@ligne = split(/;/, $_ );
    $listop = $status[0];
    $listcmd = $status[1];
    $fileprefix = $status[2];
    print "prefixe trouve $fileprefix \n";
    $parsername = $status[3];

    $tab=`find $DIR/working-dir -type f -name \"$fileprefix*\"`;
    print "j'ai trouve les fichiers suivant : $tab \n";
    @table = split(/\n/,$tab);

    for ($index = 0; $index <= $#table; $index++) {
        print "le fichier numero $index est : $table[$index]\n";
        $fichier = $table[$index];
        print "fichier traite : $fichier\n";
        system("/usr/bin/perl $DIR/parsers/$parsername $fichier");
    }
}
close (SSHCONFIG);

和文件parser1.pl

代码语言:javascript
复制
$fichier=$ARGV[0]; # fichier a traiter par le parser
warn $fichier;
$output=$fichier."_OUTPUT";
chomp($fichier); # Suppression des \n incongrus
@cstemp1 = split(/\//,$fichier);
@cstemp2 = split(/_/,$cstemp1[$#cstemp1]);
$cs = $cstemp2[1];
$ip = $cstemp2[2];
my ($etat, $ifname, $myip); # Variables a la chaine

# Ouverture des flux d'entrée et de sortie
open(DATA,$fichier) || die ("Erreur d'ouverture de $fichier\n") ;
close(DATA);

现在执行时会发生什么呢?

代码语言:javascript
复制
perl executeParsers.pl
OBS,9 Cegetel,Altitude
sh ip int
shipint
parser1.pl

prefixe trouve shipint
j'ai trouve les fichiers suivant : /tech/gtr/scripts/osm/environnement_qualif/scan-rh2/working-dir/shipint_952923S1_<ip>

le fichier numero 0 est : /tech/gtr/scripts/osm/environnement_qualif/scan-rh2/working-dir/shipint_952923S1_<ip>
fichier traite : /tech/gtr/scripts/osm/environnement_qualif/scan-rh2/working-dir/shipint_952923S1_<ip>
Warning: something's wrong at /tech/gtr/scripts/osm/environnement_qualif/scan-rh2/parsers/parser1.pl line 7.
Erreur d'ouverture de
sh: line 1: /tech/gtr/scripts/osm/environnement_qualif/scan-rh2/working-dir/shipint_952923S1_<ip>: Permission denied
OBS,9 Cegetel,Altitude
sh int status
shintstatus
parser2.pl
prefixe trouve shintstatus
j'ai trouve les fichiers suivant :

现在,如果我要从我的ssh.conf文件中删除第二行,它就可以工作了。我想这句话的结尾有什么问题。

EN

回答 2

Stack Overflow用户

发布于 2014-08-04 13:56:58

$fichier可能不包含您认为它所做的事情。使用warn $fichier;找出它在使用前包含的内容。另外,使用打开的三个参数和$!变量告诉您为什么失败:

代码语言:javascript
复制
open(my $fh, "<", "input.txt")
or die "cannot open < input.txt: $!";

http://perldoc.perl.org/functions/open.html

票数 1
EN

Stack Overflow用户

发布于 2014-08-05 07:40:19

又一次回程错误。

在打印vars的全部输出时:

代码语言:javascript
复制
prefixe trouve shipint
operateurs : OBS,9 Cegetel,Altitude
commandes : sh ip int
parser name : parser1.pl

j'ai trouve les fichiers suivant : /tech/gtr/scripts/osm/environnement_qualif/scan-rh2/working-dir/shipint_952923S1_126.110.101.250

le fichier numero 0 est : /tech/gtr/scripts/osm/environnement_qualif/scan-rh2/working-dir/shipint_952923S1_126.110.101.250

这意味着$parsername上有一个回车返回,必须用

代码语言:javascript
复制
$parsername =~ s/\s+\z// ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25120286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档