试图从python调用perl脚本,导致奇怪的行为

时间:2011-06-23 06:00:50

标签: python perl subprocess

我正在尝试使用以下行从我的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。

任何人都可以提供帮助吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

如果cwd不是None,则子节点的当前目录在执行之前将更改为cwd。请注意,在搜索可执行文件时不考虑此目录,因此您无法指定程序相对于cwd的路径。