调用命令行功能在Perl和获得输出字符串(Call command-line function in

2019-09-16 15:00发布

什么是执行Perl中的一个命令行功能的最佳/最简单的方法,这样我可以得到的输出作为一个字符串?

什么实际上,我试图做的是从PostgreSQL中PL / Perl函数中调用Java程序,我想输出字符串,但目前它似乎只是返回0。

下面是一段简单的代码来解释我后:

CREATE OR REPLACE FUNCTION perl_func()
  RETURNS character varying AS
$BODY$    
  return system("java -version");
$BODY$
  LANGUAGE plperlu VOLATILE
  COST 100;

Answer 1:

你可以使用反引号。 从引用perldoc perlop

* QX / STRING /

*`STRING`

一个字符串,它是(可能)内插,然后与/ bin / sh的或其等效系统命令执行。 壳牌通配符,管道和重定向将荣幸。 该命令的收集标准输出被返回; 标准错误是不受影响。 在标量上下文,它回来作为一个单一的(潜在的多线)字符串,或者为undef如果命令失败。 在列表环境中,返回线路(但是你定义线/使用$或INPUT_RECORD_SEPARATOR $)列表,或者一个空列表,如果该命令失败。

不能使用system这一点,因为它只是返回的参数(当作为shell命令运行)的返回值。 这应该工作:

CREATE OR REPLACE FUNCTION perl_func()
  RETURNS character varying AS
$BODY$
  my $output=`java -version`;
  chomp($output);
  return $output;
$BODY$
  LANGUAGE plperlu VOLATILE
  COST 100;

请注意,backticked命令的输出通常包括结尾的新行,所以这是可以得到通过摆脱这种chomp



文章来源: Call command-line function in Perl and get output as String