从python执行perl脚本

时间:2013-09-09 15:17:34

标签: python perl unix

我正在尝试从python脚本执行Perl脚本,但似乎它还没有被执行! 在python中使用此命令:

os.popen('dump_hash.pl {}'.format(scn_filepath))

这是dump_hash.pl脚本:

$path = <STDIN>;
require "$path";
open (OUTFILE, "+>dumpered_hash");
print OUTFILE Dumper("\%...");
close (OUTFILE);

并且在尝试打开“dumpered_hash”时脚本卡住了作为可读文件。当我在shell中运行ls命令时,该目录没有dumpered_hash文件。

谢谢你。

1 个答案:

答案 0 :(得分:3)

您的Perl脚本错误:

  • 您从STDIN读取路径,而不是从命令行参数读取。
  • 读取一行后不删除换行符。您将寻找"foo\n"而不是"foo"
  • 您没有任何错误检查。
  • 您未加载Data::Dumper模块。

您确定要将$path的文件作为Perl代码执行吗?

清理后,我将Perl脚本编写为

perl -MData::Dumper \
  -do $ARGV[0];' \
  -e'print Dumper \%some_global' \
  input-file.pl >output

或作为

use strict; use warnings;
use Data::Dumper
do $ARGV[0];
open my $fh, ">", "output" or die "Can't open output: $!";
print { $fh } Dumper \%some_global;

如果你真的想要STDIN的文件名:

 use strict; use warnings;
 use Data::Dumper;
 chomp(my $path = <STDIN>);
 do $path;
 ...