什么是“ForceArray=>qr/^(logentry | path)$”?

2024-10-01 05:05:21 发布

您现在位置:Python中文网/ 问答频道 /正文

use strict;
use XML::Simple;

# $ARGV[0] = <revision_number>
# $ARGV[1] = <https://svn_path>
# $ARGV[2] = <branch>
   
 my $command = `svn log -v --xml -rHEAD:$ARGV[0] $ARGV[1]/$ARGV[2]/some_dir/`;
 eval { $ref = XMLin($command, ForceArray=> qr/^(logentry|path)$/); };
 die "Cannot read xml output of svn log -v --xml -rHEAD:$ARGV[0]: $@" if($@);

遇到了这个perl代码段。可以看出它正在执行svnlog命令。 XMLin是一种可以读取xml内容的东西,我相信(使用xml::Simple)

用python编写等效代码。查看此语法后开始阅读perl。发现理解它有困难。什么是ForceArrayqr/^(logentry|path)$/

如何用python(eval)编写相同的代码? 是否有任何工具/脚本可用于将perl翻译为python


Tags: pathloguseevalsvnxmlsimplecommand
1条回答
网友
1楼 · 发布于 2024-10-01 05:05:21
ForceArray=> qr/^(logentry|path)$/

相当于

"ForceArray", qr/^(logentry|path)$/

Python中的直接等价物是

"ForceArray", regex.compile(r"^(logentry|path)$")

但它充当一个关键字(命名)参数,因此更准确的Python等价物应该是

ForceArray=regex.compile(r"^(logentry|path)$")

此特定参数影响XMLin返回的结构

您不应该在Perl中使用XML::Simple,更不应该在Python中重新创建它。使用适当的解析器并相应地调整代码


eval BLOCK等价的Python是try语句

eval { ... };
die "..." if($@);

类似于

try:
   ...
except ...:
   ...

相关问题 更多 >