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」を読み取り可能なファイルとして開こうとすると、スクリプトがスタックします。シェルで ls コマンドを実行すると、ディレクトリに dumpered_hash ファイルがありません。

ありがとうございます。

4

1 に答える 1

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;
 ...
于 2013-09-09T15:30:47.397 に答える