Запустите скрипт Python в Perl - PullRequest
2 голосов
/ 28 декабря 2011

У меня есть два сценария, сценарий python и сценарий perl.

Как я могу заставить скрипт perl запускать скрипт python, а затем запускаться сам?

Ответы [ 3 ]

8 голосов
/ 28 декабря 2011

Примерно так должно работать:

system("python", "/my/script.py") == 0 or die "Python script returned error $?";

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

open(my $py, "|-", "python2 /my/script.py") or die "Cannot run Python script: $!";
while (<$py>) {
  # do something with the input
}
close($py);

Это также работает аналогично, если вы хотите ввести данные дляподпроцесс.

2 голосов
/ 28 декабря 2011

Лучший способ - выполнить скрипт python на системном уровне, используя IPC :: Open3.Это сделает вещи более безопасными и удобочитаемыми в вашем коде, чем использование system ();

Вы можете легко выполнять системные команды, читать и записывать их с помощью IPC :: Open3, например:

use strict;
use IPC::Open3 ();
use IO::Handle ();  #not required but good for portabilty

my $write_handle = IO::Handle->new();
my $read_handle = IO::Handle->new();
my $pid = IPC::Open3::open3($write_handle, $read_handle, '>&STDERR', $python_binary. ' ' . $python_file_path);
if(!$pid){ function_that_records_errors("Error"); }
#read multi-line data from process:
local $/;
my $read_data = readline($read_handle);
#write to python process
print $write_handle 'Something to write to python process';
waitpid($pid, 0);  #wait for child process to close before continuing

Это создаст раздвоенный процесс для запуска кода Python.Это означает, что в случае сбоя кода Python вы можете восстановить и продолжить работу с вашей программой.

1 голос
/ 28 декабря 2011

Может быть проще запустить оба сценария из сценария оболочки и использовать каналы (при условии, что вы находитесь в среде Unix), если вам нужно передать результаты из одной программы в другую

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...