如何从perl调用python传递字符串?

时间:2012-06-11 13:36:47

标签: python perl

假设perl代码是这样的......

open(STDOUT, ">$PName") || die "Can't redirect stdout";
$status = system("python Example.py $PName.txt");

(取自http://www.linuxquestions.org/questions/programming-9/perl-script-call-python-linux-551063/

我在python中需要做些什么才能将字符串传递给perl脚本?

我需要简单地返回字符串吗?或打印到控制台?或其他什么?

3 个答案:

答案 0 :(得分:3)

你可以打印到控制台,在perl中使用:

my $from_py = `python foo.py bar`;

答案 1 :(得分:1)

system命令在Perl中用于捕获命令输出没有用。您应该使用反引号来执行命令并在Python脚本中写入stdout。

#-- returns one string
$result = `command arg1 arg2`;

#-- returns a list of strings
@result = `command arg2 arg2`;

有关详细信息,请参阅下面的链接来源。

来源:executing external commands in Perl

答案 2 :(得分:1)

最简单的方法是在

中使用backticks (``)
my $output = `python Example.py $PName.txt`;
print "Backticks:\n", $output;

同义方法涉及qx//

my $output = qx/python Example.py $PName.txt/;
print "Backticks:\n", $output;

要读取每一行,请从Python子流程中打开一个管道。

print "Pipe:\n";
open my $fh, "python Example.py $PName.txt |";
while (<$fh>) {
  print "Perl got: ", $_;
}
close $fh or warn "$0: close: $!";

如perlipc文档的“Safe Pipe Opens” section所述,您可以通过将命令拆分为参数来绕过shell。

open my $fh, "-|", "python", "Example.py", "$PName.txt";

输出:

Backticks:
Python program: Example.py
Argument:       pname-value.txt

Pipe:
Perl got: Python program: Example.py
Perl got: Argument:       pname-value.txt