首页 > 解决方案 > 内联 - 在 perl 中从 python 访问 python 变量

问题描述


use Inline Python => <<END;
var_py = "test"

END
my $var1 = "from_perl";
print "var1 $var1\n";
print "variably from py $var_py\n";

输出:

var1 from_perl

从 py 可变

我得到内联 Python 中定义的 python 变量的空值。有人可以建议如何从 perl 中读取 python 中定义的变量吗

标签: pythonperl

解决方案


use Inline Python => ( <<'__EOS__' =~ s/^[ ]{3}//mgr );

   import sys

   var_py = "test"

   def get_var_py():
      return var_py

   def _get_global_var(name):
      name = name.decode('UTF-8')
      return globals()[name]

   def _get_module_var(mod_name, var_name):
      mod_name = mod_name.decode('UTF-8')
      var_name = var_name.decode('UTF-8')
      return getattr(sys.modules[mod_name], var_name)

__EOS__

sub get_global_var { my @args = @_; utf8::encode($_) for @args; _get_global_var(@args) }
sub get_module_var { my @args = @_; utf8::encode($_) for @args; _get_module_var(@args) }

say "Variable from py: " . get_var_py();
say "Variable from py: " . get_global_var('var_py');
say "Variable from py: " . get_module_var('__main__', 'var_py');

输出

Variable from py: test
Variable from py: test
Variable from py: test

推荐阅读