我正在尝试使用以下行从我的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。
任何人都可以提供帮助吗?
答案 0 :(得分:0)
在Perl中,有一个很好的规则:如果可能,请使用popen
和system
的列表形式。 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的路径。