小编Gre*_*Dan的帖子

XML :: LibXML替换元素值

我想替换xml文件中元素的"VAL1"值

出于某种原因,它对我不起作用:

   <testing>
<application_name>TEST</application_name>
<application_id>VAL1</application_id>
<application_password>1234</application_password>
   </testing>

my $parser =XML::LibXML->new();
$tree   =$parser->parse_file($xml);
$root   =$tree->getDocumentElement;
my ($elem)=$root->findnodes('/testing/application_id');
$elem->setValue('VAL2');    
Run Code Online (Sandbox Code Playgroud)

错误是get是"无法找到对象方法"setValue"via package"XML :: LibXML :: Element ......"

perl xml-libxml

8
推荐指数
2
解决办法
1万
查看次数

airflow - 所有正在排队但未移至执行的任务

气流1.8.1

调度程序,工作程序和Web服务器在AWS上的单独docker中运行.

该系统已投入使用,现在由于某种原因,所有任务都处于排队状态......

调度程序日志中没有错误.

在worker中我看到这个错误(不确定自调度程序以后它是否应该从排队状态移动任务):

[2018-01-23 20:46:00,428] {base_task_runner.py:95} INFO - 子任务:[2018-01-23 20:46:00,428] {models.py:1122} INFO - 未满足的依赖关系,依赖关系'任务实例状态'失败:任务处于'成功'状态,该状态不是执行的有效状态.必须清除该任务才能运行.

我尝试重新启动,气流清除然后resetdb命令,但它没有帮助.

知道还有什么办法可以解决这个问题吗?

谢谢

airflow airflow-scheduler

7
推荐指数
0
解决办法
589
查看次数

从perl中的external*nix命令获取STDOUT,STDERR和响应代码

我想从我的Perl脚本中执行外部命令,将stdout和stderr的输出放入$variable我的选择中,并将命令的退出代码放入$?变量中.

我在perlfaq8和他们的论坛中找到了解决方案,但他们并没有为我工作.奇怪的是,只要退出代码是正确的,我在任何情况下都不会获得sdterr的输出.

我在Red Hat Linux 5上使用Perl版本5.8.8.

这是我正在尝试的一个例子:

my $cmd="less";
my $out=`$cmd 2>&1`;
Run Code Online (Sandbox Code Playgroud)

要么

my $out=qx($cmd 2>&1);
Run Code Online (Sandbox Code Playgroud)

要么

open(PIPE, "$cmd 2>&1|");
Run Code Online (Sandbox Code Playgroud)

当命令成功运行时,我可以捕获stdout.

我不想使用其他捕获模块.如何捕获外部命令的完整结果?

perl stdout stderr

4
推荐指数
3
解决办法
8086
查看次数

写入xml时,XML :: LibXML删除标题

当我使用XML :: LibXML更新值时,前两行被删除.我希望保留xml,除了一个更新的值.

我原来的xml是:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <property>
   <name>test.name</name>
   <value>help</value>
   <description>xml issue</description>
 </property>
Run Code Online (Sandbox Code Playgroud)

....

代码是:

my $parser =XML::LibXML->new();
my $tree   =$parser->parse_file($file) or die $!;
my $root   =$tree->getDocumentElement;

my $searchPath="/configuration/property[name=\"$name\"]/value/text()";
my ($val)=$root->findnodes($searchPath);

$val->setData($new_val);
open (UPDXML, "> $file") or die "ERROR: Failed to write into $file...";
 print UPDXML $root->toString(1);
close (UPDXML);
Run Code Online (Sandbox Code Playgroud)

我尝试使用print UPDXML $ root-> toStringC14N(1),但它没有帮助...

xml perl xml-libxml

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

如何使用xpath连接多个节点

我正在寻找一种方法来使用Xpath 2.0获取以下字符串:

AAA-Site-1.test.com,BBB-Site-1.test.com

<SystemRoot SystemName='Xpath Test'>
     <SystemRoot SystemDomain='test.com' SystemName='AAA-Site-1'>
      <Product InstallDate='11/01/2012' ProductName='AAA'/>
    </SystemRoot>
    <SystemRoot SystemDomain='test.com' SystemName='BBB-Site-1'>
      <Product InstallDate='11/01/2012' ProductName='BBB'/>
    </SystemRoot>
</SystemRoot>
Run Code Online (Sandbox Code Playgroud)

我试过concat然后串联,但我得到"太多的价值"......

concat(/SystemRoot/SystemRoot/@SystemDomain,'.',/SystemRoot/SystemRoot/@SystemName)
Run Code Online (Sandbox Code Playgroud)

是否可以通过仅使用XPath 2.0来实现?

xml xml-parsing xpath-2.0

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

BEGIN块中LD_LIBRARY_PATH的初始化失败

我必须将/oracle/v10.2.0/lib添加到LD_LIBRARY_PATH以使用DBI模块连接到Oracle.

如果我在执行perl脚本之前在shell中设置LD_LIBRARY_PATH,一切正常.

但它不适用于脚本:

BEGIN {
  $ENV{'LD_LIBRARY_PATH'}='/oracle/v10.2.0/lib';
}
use DBI;
Run Code Online (Sandbox Code Playgroud)

当我执行脚本时,我收到错误:

install_driver(Oracle)失败:无法为模块DBD :: Oracle加载'/usr/apps/perl5/site_perl/5.8.8/i686-linux/auto/DBD/Oracle/Oracle.so':libclntsh.so.10.1 :无法打开共享对象文件:/usr/apps/perl5/5.8.8/i686-linux/DynaLoader.pm第230行没有这样的文件或目录.在(eval 3)第3行编译在(eval 3)的require中失败第3行.也许未安装在/var/tmp/getTraceDB.pl第23行所需的共享库或dll

oracle perl dbi dbd

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

无法使用 Linux 日期命令仅设置年份

由于某种原因,我无法仅使用 date 命令更新年份

date
Tue Mar  4 20:15:42 IST 2014

date '+%Y' -s '2013'

date
Tue Mar  4 20:13:01 IST 2014
Run Code Online (Sandbox Code Playgroud)

我在 RedHat 和 Ubuntu 上都试过了……

NTP 没有运行...

linux bash shell ubuntu rhel

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

为什么我的Perl正则表达式不匹配简单的主机名?

我无法提取可能同时是FQDN和简单主机名的主机名

例如,使用sed它可以正常工作:

echo test_serv1.TEST-Site-1.test.com|sed 's/\..*//'
test_serv1
echo test_serv1|sed 's/\..*//'
test_serv1
Run Code Online (Sandbox Code Playgroud)

但是在Perl中我只得到它的FQDN:

my $t='test_serv1.TEST-Site-1.test.com';
my ($res) = $t=~ /^(.*?)\./;
print "$res\n";
Run Code Online (Sandbox Code Playgroud)

我为test_serv1尝试了不同的组合,但它不起作用,为什么?

regex perl regex-greedy

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