假设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脚本?
我需要简单地返回字符串吗?或打印到控制台?或其他什么?
答案 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`;
有关详细信息,请参阅下面的链接来源。
答案 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