我使用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) 为了成为一个更好的脚本编写者,有没有办法在更少的行中生成以下代码?
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) 如何检查已在脚本中处理过的文件,以便我不再处理这些文件?和/或我现在这样做有什么问题?
您好,我正在使用环形缓冲区选项运行tshark,以便在5MB或1小时后转储到文件.我写了一个python脚本来读取XML中的这些文件并转储到数据库中,这很好.
我的问题是,这实际上是流程密集的,当转换为XML时,其中一个5MB可以变成200MB的文件,所以我不想做任何不必要的处理.
该脚本每10分钟运行一次,每次运行处理约5个文件,因为正在扫描为任何新条目创建文件的文件夹,我将文件的哈希转储到数据库中,并在下次运行时检查哈希值,如果它不在数据库中我扫描文件.问题是,这似乎不是每次都有效,它最终处理它已经完成的文件.当我检查它一直试图处理的文件的哈希值时,它不会出现在数据库的任何地方,因此为什么要反复处理它.
我在脚本的输出中打印出文件名+ hash:
__PRE__
它应该做的唯一文件是每个文件夹一个,所以只有4个文件.这导致不必要的处理,我必须处理重叠的cron作业+其他受影响的服务.
我希望从这篇文章中得到的是一个更好的方法,或希望有人可以告诉我为什么会发生,我知道后者可能很难,因为它可能是一堆原因.
这是代码(我不是编码器,但是系统管理员,所以要善良:P)第30-32行处理哈希比较.提前致谢.
当我运行以下代码时,我没有得到正确的答案.当它返回[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)