Как вызвать скрипт python из Perl?

#python #perl

#python #perl

Вопрос:

Мне нужно вызвать «/usr/bin/pdf2txt.py «с несколькими аргументами из моего скрипта Perl. Как я должен это сделать?

Ответ №1:

Если вам нужно захватить стандартный вывод:

 my $ret = `/usr/bin/pdf2txt.py arg1 arg2`;
  

Вы можете легко захватить STDERR, перенаправив его в стандартный вывод:

 my $ret = `/usr/bin/pdf2txt.py arg1 arg2 2>amp;1`;
  

Если вам нужно зафиксировать статус выхода, то вы можете использовать:

 my $ret = system("/usr/bin/pdf2txt.py arg1 arg2");
  

Имейте в виду, что оба `` и system() блокируются до тех пор, пока программа не завершит выполнение.

Если вы не хотите ждать, или вам нужно зафиксировать как STDOUT / STDERR, так и статус выхода, то вам следует использовать IPC::Open3.

Комментарии:

1. Его лучше использовать system '/usr/bin/pdf2txt.py', $arg1, $arg2 , поскольку это позволит избежать проблем (и опасных багов) с интерполяцией оболочки.

2.Вы можете фиксировать как состояние STDOUT, так и состояние выхода с помощью обратных меток, используя $? , например: my $output = `/usr/bin/pdf2txt.py arg1 arg2 2>amp;1`; my $ret = $?;

Ответ №2:

 my $output = `/usr/bin/pdf2txt.py arg1 arg2`;
  

Комментарии:

1. убедитесь, что скрипт является исполняемым (chmod x) и что у него есть надлежащий хэш-код (например, #!/usr/bin/env python).

Ответ №3:

Если вам не нужен вывод скрипта, но вам нужен код возврата, используйте system() :

 ...
my $bin = "/usr/bin/pdf2txt.py";
my @args = qw(arg1 arg2 arg3);
my $cmd = "$bin ".join(" ", @args);

system ($cmd) == 0 or die "command was unable to run to completion:n$cmdn";
  

Комментарии:

1. Не присоединяйтесь к @args . Используйте system $bin, @args; — это позволяет избежать ряда потенциально опасных ошибок.

Ответ №4:

ЕСЛИ вы хотите видеть вывод в режиме реального времени, а не после завершения работы скрипта, добавьте -u после python. пример :

мой $ ret = system(«python -u pdf2txt.py arg1 arg2″);