пытается вызвать Perl-скрипт из Python, что приводит к странному поведению - PullRequest
0 голосов
/ 23 июня 2011

Я пытаюсь вызвать Perl-скрипт из моей программы на Python со следующей строкой:

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

, когда я запускаю тот же 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, я не знаю, как это исправить,но почему тот же скрипт ведет себя по-разному, когда я запускаю его из оболочки или из subprocess.call?

Я использую MacOsX, Python 2.6 (но я пробовал также с 2.5, то же самое) и Perl 5.10.

Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 21 октября 2011

Вам может потребоваться передать рабочий каталог в subprocess.call

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

Если cwd не None, текущий каталог дочернего элемента будет изменен на cwd до его выполнения.Обратите внимание, что этот каталог не учитывается при поиске исполняемого файла, поэтому вы не можете указать путь к программе относительно cwd.

0 голосов
/ 27 июня 2011

В Perl есть хорошее правило: если возможно, используйте формы списка popen и system. В Python тоже есть такие. Интересно, что произойдет, если вы попробуете это:

helper = "/path/to/compute_lexrank.pl"
helper_input = "/path/to/11sent"
subprocess.call([helper, helper_input])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...