小编sal*_*ise的帖子

使用perl XML :: LibXML进行解析

我使用perl的XML :: LibXML模块来解析来自设备的XML响应.看来我能成功获取数据的唯一方法是修改设备的XML响应.这是我对设备的XML响应:

<chassis-inventory xmlns="http://xml.juniper.net/junos/10.3D0/junos-chassis">

<chassis junosstyle="inventory">

<name>Chassis</name>

<serial-number>JN111863EAFF</serial-number>

<description>VJX1000</description>

<chassis-module>

<name>Midplane</name>

</chassis-module>

<chassis-module>

<name>System IO</name>

</chassis-module>

<chassis-module>

<name>Routing Engine</name>

<description>VJX1000</description>

<chassis-re-disk-module>

<name>ad0</name>

<disk-size>1953</disk-size>

<model>QEMU HARDDISK</model>

<serial-number>QM00001</serial-number>

<description>Hard Disk</description>

</chassis-re-disk-module>

</chassis-module>

<chassis-module>

<name>FPC 0</name>

<chassis-sub-module>

<name>PIC 0</name>

</chassis-sub-module>

</chassis-module>

<chassis-module>

<name>Power Supply 0</name>

</chassis-module>

</chassis>

</chassis-inventory>
Run Code Online (Sandbox Code Playgroud)

这是我用来解析和查找序列号的perl代码,例如:

#!/bin/env perl
use strict;
use warnings;
use XML::LibXML;
my $f = ("/var/working/xmlstuff");
sub yeah {
my $ff;
my $f = shift;
open(my $fff,$f);
while(<$fff>) {
$_ =~ s/^\s+$//; 
$_ =~ s/^(<\S+)\s.*?=.*?((?:\/)?>)/$1$2/g;
$ff .= …
Run Code Online (Sandbox Code Playgroud)

perl libxml2

4
推荐指数
1
解决办法
4149
查看次数

perl高效代码

为了成为一个更好的脚本编写者,有没有办法在更少的行中生成以下代码?

sub task1_2_2 {
  #Make sure syslog configuration is correct
  my @r3r = my @r4r = my @r5r = my @r6r = my @r7r = my @r8r = ("name = 67.176.10.200","facility-override = local3");
  my @r1r = ("name = 67.176.10.200","facility-override = local3","source-address = 67.176.255.1");
  my @r2r = ("name = 67.176.10.200","facility-override = local3","source-address = 67.176.255.2");
  my (@r1,@r2,@r3,@r4,@r5,@r6,@r7,@r8,%seen,@result1,@result2,@result3,@result4,@result5,@result6,@result7,@result8,$results,$item,$ii);
  my $pass = "pass";
  my $xinfo = shift;
  my $ip = shift;
  my $data = XML::LibXML->load_xml(string => $xinfo);
  my $datax = XML::LibXML::XPathContext->new($data);
  my $syspath = …
Run Code Online (Sandbox Code Playgroud)

perl

4
推荐指数
1
解决办法
240
查看次数

如何处理要在cron作业中处理的新文件

如何检查已在脚本中处理过的文件,以便我不再处理这些文件?和/或我现在这样做有什么问题?

您好,我正在使用环形缓冲区选项运行tshark,以便在5MB或1小时后转储到文件.我写了一个python脚本来读取XML中的这些文件并转储到数据库中,这很好.

我的问题是,这实际上是流程密集的,当转换为XML时,其中一个5MB可以变成200MB的文件,所以我不想做任何不必要的处理.

该脚本每10分钟运行一次,每次运行处理约5个文件,因为正在扫描为任何新条目创建文件的文件夹,我将文件的哈希转储到数据库中,并在下次运行时检查哈希值,如果它不在数据库中我扫描文件.问题是,这似乎不是每次都有效,它最终处理它已经完成的文件.当我检查它一直试图处理的文件的哈希值时,它不会出现在数据库的任何地方,因此为什么要反复处理它.

我在脚本的输出中打印出文件名+ hash:

__PRE__

它应该做的唯一文件是每个文件夹一个,所以只有4个文件.这导致不必要的处理,我必须处理重叠的cron作业+其他受影响的服务.

我希望从这篇文章中得到的是一个更好的方法,或希望有人可以告诉我为什么会发生,我知道后者可能很难,因为它可能是一堆原因.

这是代码(我不是编码器,但是系统管理员,所以要善良:P)第30-32行处理哈希比较.提前致谢.

python mysql sysadmin hash file-io

3
推荐指数
1
解决办法
2209
查看次数

从列表中删除奇数

当我运行以下代码时,我没有得到正确的答案.当它返回[4,4]时返回[4].

def purify(y):
    new_numbers = []
    for x in y:
            if x%2 ==0:
                    new_numbers.append(x)
        return new_numbers

print(purify([4,5,5,4]))
Run Code Online (Sandbox Code Playgroud)

python

1
推荐指数
1
解决办法
1264
查看次数

标签 统计

perl ×2

python ×2

file-io ×1

hash ×1

libxml2 ×1

mysql ×1

sysadmin ×1