【问题标题】:trying to call a perl script from python, resulting in weird behaviour试图从 python 调用 perl 脚本,导致奇怪的行为
【发布时间】:2011-06-23 06:00:49
【问题描述】:

我正在尝试使用以下行从我的 python 程序中调用 perl 脚本:

subprocess.call(r'/path/to/compute_lexrank.pl /path/to/11sent',shell=True)

当我从 shell 运行相同的 perl 脚本时(只需输入 /path/to/compute_lexrank.pl /path/to/11sent),它按预期工作,但是当我从 python 程序运行它时,perl 脚本被执行,但给出了一个神秘的错误:

Math::MatrixReal::new(): number of rows must be integer > 0 at /Users/filippo/Downloads/clairlib-core-1.08/lib//Clair/Network.pm line 1628

现在因为我自己没有编写 perl 脚本,所以我不知道如何解决这个问题,但是为什么当我从 shell 或 subprocess.call 运行同一个脚本时,它的行为会有所不同?

我正在使用 MacOsX、python 2.6(但我也尝试过 2.5,同样的东西)和 perl 5.10。

有人可以帮忙吗?

【问题讨论】:

  • 检查您的环境。您获得不同版本的 Perl 的可能性很高。
  • 我该怎么做?我在 perl 脚本的开头指定了 #!/usr/bin/perl -w,如何查看使用的 perl 版本?谢谢
  • perl -e 'print "$]\n";' 应该可以解决问题。
  • 我添加了一个 print "$]\n";到 perl 文件,在这两种情况下它都会打印出 5.010000
  • 我想我们没油了。

标签: python perl subprocess


【解决方案1】:

在 Perl 中有一个很好的规则:如果可能,请使用 popensystem 的列表形式。 Python 似乎也有这些。我想知道如果你试试这个会发生什么:

helper = "/path/to/compute_lexrank.pl"
helper_input = "/path/to/11sent"
subprocess.call([helper, helper_input])

【讨论】:

  • 我刚试了,还是一样的错误。我无法理解从 shell 执行脚本或从 python 内部执行脚本的区别
【解决方案2】:

您可能需要将工作目录传递给 subprocess.call

subprocess.call(r'/path/to/compute_lexrank.pl /path/to/11sent',shell=True,cwd="/path/to")

如果 cwd 不为 None,则子进程的当前目录将在执行之前更改为 cwd。注意,搜索可执行文件时不考虑这个目录,所以不能指定程序相对于cwd的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-01
    • 2019-09-15
    • 2014-02-06
    • 2013-12-06
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多