Кто-нибудь знает Milsted Rexx для Windows?Open-Rexx? - PullRequest
1 голос
/ 15 июля 2011

Продукт CA для автоматизации имеет встроенный интерпретатор rexx. Я использовал другие интерпретаторы Rexx, прежде чем вернуться к оригиналу на CMS. Я пытаюсь получить доступ к внешней очереди данных, чтобы позволить сценариям AP rexx вызывать и возвращать данные из программ на других языках. Теперь CA дал понять, что это не Object rexx или OORexx, а "Milstead" (sic) rexx. Я использую Unil-Rexx Нила Милстеда (хороший Neil, если вы читаете), который реализует rxqueue, который делает то, что мне нужно.

разбор уровня имени версии скажем "rexx это" имя "и" уровень говорят, что "rexx util is" RxFuncQuery ("SysUtilVersion") дает: rexx - это REXX: Open-REXX: 299: Open-REXX: ASCII: MultiThread: DynamicLink и 4.00 04 февраля 2008

07/15/2011 08:27:19 rexx - 30

Мой гугл-фу подводит меня здесь, и я продолжаю возвращаться на те же самые сайты.
Так кто-нибудь знает этот конкретный Rexx и как я могу заставить его запускать код не-rexx и получать выходные данные обратно? Я действительно не хочу, чтобы запись ввода-вывода была связана с временными файлами.

Ответы [ 2 ]

4 голосов
/ 19 июля 2011

Если вы хотите получить вывод из внешней программы (исполняемой программы) в REXX, вы можете использовать функцию POPEN, которая перенаправляет стандартный вывод команды во внешнюю очередь данных.Затем вы можете манипулировать очередью, используя следующие инструкции:

  • pull (parse pull) - извлечение данных из верхней части очереди
  • push - добавление данных в верхнюю часть очереди
  • queue - добавить данные в конец очереди
  • queued - возвращает номер оставшейся строки в очереди

Простой пример:

call popen ('dir /?')
lines = QUEUED()

say "Number of output lines:" lines
do i = 1 to lines
   pull line
   say "Line #"||i||":" line
end
3 голосов
/ 28 февраля 2014

Более современный подход, который имеет дополнительное преимущество диагностики ошибок, заключается в следующем:

cmd = 'dir /?'
address COMMAND cmd with output stem cmdout. error stem cmderr.

if cmderr.0 <> 0 then do  /* an error has occurred executing this command */   
  do i = 1 to cmderr.0
    say "Error text line" i": '"cmderr.i"'"
    end
  end
else do i = 1 to cmdout.0   /* no error has occurred so just process the output */
  say "Line #"i":'"cmdout.i"'"
  end
...