从python执行perl脚本

从python执行perl脚本,python,perl,unix,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); $path=

我试图从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);
$path=;
需要“$path”;
打开(输出文件,“+>转储的_散列”);
打印输出文件转储程序(“\%…”);
关闭(输出文件);
当试图将“dumperd_hash”作为可读文件打开时,脚本会出现问题。当我在shell中运行ls命令时,目录中没有转储的\u散列文件


谢谢。

您的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
或作为

如果您确实希望从STDIN获取文件名:

 use strict; use warnings;
 use Data::Dumper;
 chomp(my $path = <STDIN>);
 do $path;
 ...
使用严格;使用警告;
使用数据::转储程序;
chomp(my$path=);
做$path;
...

脚本“未执行”和“试图打开时卡住”怎么可能?如果打开文件进行输出时出现问题,这些链接可能会对您有所帮助:-否则,您能否提供更详细的信息?什么工作,什么不工作,哪个脚本是如何调用的,等等。也粘贴准确的错误消息。我搞错了,它卡在os.popen(..)命令上。使用
subprocess.call('perl dump\u hash.pl')
使用
subprocess
python模块?subprocess.popen('dump\u hash.pl{}.format(scn\u filepath)),尝试subprocess.call它不工作,给出相同的错误。如果在*nix下运行,可能需要添加
#行到.pl文件的开头,否则您的操作系统几乎没有理由猜测它是Perl。该路径用于包含复杂哈希表名/./hash.pl的文件。我已加载转储程序,并收到警告。我需要路径中的文件。
require
do
在这方面是等效的。但是,它没有运行。脚本不会创建任何文件。如果为它创建文件,它不会向它们写入任何内容。顺便说一句,该脚本已通过require检查为具有完整路径的文件。它成功了。
 use strict; use warnings;
 use Data::Dumper;
 chomp(my $path = <STDIN>);
 do $path;
 ...