Python 在Perl脚本上使用另一个解释器运行代码

Python 在Perl脚本上使用另一个解释器运行代码,python,perl,Python,Perl,讨论从Bash脚本中运行Python代码的方法 有没有办法在Perl脚本中执行类似的操作?i、 e.有没有办法运行在Perl脚本上键入的Python代码?注意,我不是在问从Perl脚本运行Python文件的问题。我问的是如何在包含Perl脚本的同一个文件中直接运行Python代码(与另一个线程讨论如何运行包含Bash脚本的Perl代码的方式相同) 例如: # /bin/perl use 5.010 my $some_perl_variable = 'hello'; # ... BEGIN P

讨论从Bash脚本中运行Python代码的方法

有没有办法在Perl脚本中执行类似的操作?i、 e.有没有办法运行在Perl脚本上键入的Python代码?注意,我不是在问从Perl脚本运行Python文件的问题。我问的是如何在包含Perl脚本的同一个文件中直接运行Python代码(与另一个线程讨论如何运行包含Bash脚本的Perl代码的方式相同)

例如:

# /bin/perl
use 5.010
my $some_perl_variable = 'hello';


# ... BEGIN PYTHON BLOCK ...
# We are still in the same file. But we are now running Python code
import sys;
print some_perl_variable # Notice that this is a perl variable
for r in range(3):
  print r
# ... END PYTHON BLOCK ...

say "We are done with the Perl script!" 
say "The output of the Python block is:"
print $output" 
1; 
应打印:

We are done with the Perl script! 
The output of the Python block is: 
hello
1
2 
3
我们已经完成了perl脚本

是的,同样的技术(这里是docs)也可以用于perl

Bash中的Perl:

perl <<'END' # note single quotes to avoid $variable interpolation
use 5.010;
say "hello world";
END
Perl中的Bash:

use autodie; # less error handling
open my $bash, "|-", "bash";
print $bash <<'END'; # single quotes again
echo hello from bash
END
use autodie; # less error handling
open my $bash, "|-", "bash";
print $bash <<'END'; # single quotes again
perl <<'INNER_END'
 use 5.010;
 say "hello inception";
INNER_END
END
使用autodie;#更少的错误处理
打开我的$bash,“|-”,“bash”;

print$bash听起来您可能对该模块感兴趣。它允许Perl调用许多其他语言的代码,并依赖于每种语言的支持模块


你没有说你想做什么,但是你提到了Python,并且有一个。是的,同样的技术(herdocs)也适用。关于所谓的“一行程序”,请参见
-e
-e
选项。如果您描述了您想要做的事情,这会有所帮助。是否要在Perl脚本中运行Python代码?这是我从你写的文章中得到的最好的猜测。@Borodin我显著地更新了OP。如果还不清楚,请告诉我。你可能是对的:他只是想把Perl代码放到Bash脚本中。在这种情况下,这个问题应该用不同的标签来标注:-/直到他停止对matterGreat的沉默,我们才知道。谢谢阿蒙和博罗丁。在Python和Perl之间共享变量怎么样(请参阅我更新的OP)@user815423426:第二个后续问题属于Borodin的答案,而不是这一个。@abarnert:你犯了让一个稍微模棱两可的问题更加模棱两可的错误。拜托,我们不需要更多的方式来理解这个问题,我们需要等到OP解释清楚为止。@Borodin:OP明确地说了“关于在Python和Perl之间共享变量如何”,所以我认为他想从Perl运行Python代码,而不仅仅是Bash代码,这一点不再含糊不清了。啊,但是Inline::Python可以运行“存在于文件中”的Python代码,OP对此感到害怕。当然,它也可以(更常见的是)运行存在于字符串中和/或直接内联在perl脚本(因此得名)中的python代码——但即使在这种情况下,perl脚本通常存在于文件中,因此除非python是动态生成的……即使如此,内存基本上还是一个文件(在linux上确实如此)。我认为唯一的解决办法是确保python代码永远不会存在或者,更严重的是……是的,这似乎是一个50/50的机会,你猜对了,这可能是一个有用的答案,即使你没有,所以肯定是+1。@abarnert我更新了OP。我希望问题现在更清楚了。很抱歉,我的问题一开始就让人困惑。@user815423426:如果要在Python和Perl之间共享变量,通常的方法是使用Perl变量调用Python函数,反之亦然。文档对此做了很好的解释,并给出了很多例子。如果您需要访问全局变量,这会比较棘手(每个方向的原因各不相同),但文档也显示了这一点,因此请先阅读它们,然后提出任何具体问题。@abarnert:有人给了您+1,但我不知道您所说的“使用Perl变量调用Python函数”是什么意思。请解释一下,因为我不过是凡人
use autodie; # less error handling
open my $bash, "|-", "bash";
print $bash <<'END'; # single quotes again
perl <<'INNER_END'
 use 5.010;
 say "hello inception";
INNER_END
END