Программирование > Perl
open2 для Win
xmolex:
Здравствуйте. Появилась проблема, которую я не могу решить самостоятельно, поэтому решил обратиться в качестве последней надежды к вам.
Имеется два скрипта. Первый скрипт запускает второй, передает ему во входной поток данные, ждет, когда данные обработаются и потом пытается получить отработанный результат.
Используя IPC::Open2 я добиваюсь нужного результата, но мне нужно, чтобы была мультиплатформенность, а он только на UNIX системах работает. Раньше я решал эту проблему для других систем просто создавав первым скриптом темповый файл, записывал туда данные и запускал второй скрипт с именем файла в параметре. Некрасиво, а что делать? Но тут возникла необходимость ловить данные POST. А это напрямую входной поток. Как я вторым скриптом смогу прочитать данные отправленные методом POST, если у меня там только имя файла. Вообщем, нужно писать во входной поток. Искал решения две недели, но похоже его просто нет. Я просто в отчаянии и в качестве последней надежды решил попросить помощи здесь.
Нашел интересную тему: http://forums.webscript.ru/showthread.php?threadid=25102. В ней советуют использовать конструкцию $text = `1.pl &`; и впринципе такая конструкция могла бы решить проблему, но как после & передать данные? Я могу их ввести только с клавиатуры.
Вообщем, очень жду совета.
xmolex:
На данный момент нашел опять таки кривое решение для Win и Mac платформы (возможно и для других, просто нет возможности проверить). Поток который мне нужно направить во вторую программу записываю в файл, например в 1.txt.
А потом выполняю $text = `perl prog2.pl < 1.txt`;
Работает, но всеже хочется отойти от использования промежуточных файлов. Поэтому буду очень благодарен за полезные мысли.
vladsu:
Может я чего не понял, тогда объясните, а пока вот:
/tmp/1.pl
--- Код: ---
#!/usr/bin/perl -w
use strict;
my $feedback = qx(/tmp/2.pl 8 254);
print "Feedback: $feedback\\n";
--- Конец кода ---
/tmp/2.pl
--- Код: ---
#!/usr/bin/perl -w
use strict;
print $ARGV[0] * $ARGV[1];
--- Конец кода ---
xmolex:
Мне нужно получать не аргументы, а полностью входной поток. К примеру, я хочу первым скриптом принять данные отправленные методом POST и передать их второму.
vladsu:
--- Цитировать ---xmolex:
К примеру, я хочу первым скриптом принять данные отправленные методом POST и передать их второму.
--- Конец цитаты ---
И? В чём проблема? Вы приняли первым скриптом данные, в какую-либо переменную/структуру, и хотите передать второму скрипту для дальнейшей обработки, так?
Навигация
Перейти к полной версии