2

我正在尝试从 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 文件。

感谢您。

4

1 回答 1

3

你的 Perl 脚本是错误的:

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

你确定你真的想以$pathPerl 代码的形式执行文件吗?

清理干净,我将 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;
 ...
于 2013-09-09T15:30:47.397 回答