3

假设 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 脚本?

我需要简单地返回字符串吗?或打印到控制台?或者是其他东西?

4

3 回答 3

3

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

my $from_py = `python foo.py bar`;
于 2012-06-11T13:40:41.900 回答
1

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

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

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

有关更多信息,请参阅下面的链接源。

来源:在 Perl 中执行外部命令

于 2012-06-11T13:40:59.987 回答
1

最简单的方法是使用反引号 ( ``),如

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 文档的“安全管道打开”部分所述,您可以通过将命令拆分为参数来绕过 shell。

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

输出:

反引号:
Python 程序:Example.py
参数:pname-value.txt

管道:
Perl 得到:Python 程序:Example.py
Perl 得到: 参数:pname-value.txt
于 2012-06-11T14:01:02.787 回答