1

CA 的自动化点产品具有嵌入式 rexx 解释器。在回到 CMS 上之前,我使用过其他 Rexx 解释器。我正在尝试访问外部数据队列以允许 AP rexx 脚本调用并从其他语言的程序中获取数据。现在 CA 已经明确表示它不是 Object rexx 或 OORexx,而是“Milstead”(原文如此)rexx。我使用 Neil Milsted 的 Uni-Rexx(如果你正在阅读,那就是一个 Neil),它实现了我需要的 rxqueue。

解析版本名称 level say "rexx is " name " and " level say "rexx util is " RxFuncQuery("SysUtilVersion") 给出:rexx is REXX:Open-REXX:299:Open-REXX:ASCII:MultiThread:DynamicLink and 4.00 04 2008 年 2 月

2011 年 7 月 15 日 08:27:19 rexx util 为 30

我的 google-fu 在这里让我失望,我不断回到相同的网站。
那么有谁知道这个特定的 Rexx 以及我如何让它运行非 rexx 代码并取回输出?我真的不想被 I/O 绑定写入临时文件。

4

2 回答 2

4

如果您想要从外部程序(可执行文件)获取输出到 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
于 2011-07-19T11:09:25.290 回答
3

具有错误诊断额外好处的更现代的方法是:

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
于 2014-02-28T19:28:47.753 回答