【问题标题】:How to catch OS-COMMAND results in Progress-4GL?如何在 Progress-4GL 中捕获 OS-COMMAND 结果?
【发布时间】:2020-12-30 08:33:37
【问题描述】:

我正在使用 this other post 中所述的日志记录工具:

OUTPUT TO VALUE("C:\Temp_Folder\logfile.txt").
...
PUT UNFORMATTED "Start : Check-zones" SKIP.
...
OUTPUT CLOSE.

这工作正常。

现在我想在输出文件中添加OS-COMMAND 的结果。
我已经尝试了以下方法:(将结果放入新创建的文件中)

OS-COMMAND NO-WAIT VALUE("WMIC printer get name, deviceID >> C:\Temp_Folder\Printers.txt").

这工作正常。
所以,我知道该命令工作正常。但是,以下方法不起作用:

OS-COMMAND NO-WAIT VALUE("WMIC printer get name, deviceID >> C:\Temp_Folder\LogFile.txt").

这很明显,因为C:\Temp_Folder\Logfile.txt 被进度应用程序锁定写入,所以OS-COMMAND 打开的shell 无法写入该文件。

为了克服这个问题,我想获取OS-COMMAND 的结果。

我该怎么做?

【问题讨论】:

    标签: command-line openedge progress-4gl


    【解决方案1】:

    不幸的是,在设计 os-command 的黑暗时代,抑制所有错误被认为是有用的。

    您可以启动一个批处理文件并让它做一些“保证”的输出错误处理,请参阅https://knowledgebase.progress.com/articles/Article/21039

    或者(因为您在 Windows 上)您可以使用 .Net system diagnostics process 类(您需要将其包装在您自己的方法或函数中以简化使用):

    DEFINE VARIABLE oProcess   AS System.Diagnostics.Process NO-UNDO.
    DEFINE VARIABLE lcstderr   AS LONGCHAR    NO-UNDO.
    DEFINE VARIABLE lcstdout   AS LONGCHAR    NO-UNDO.
    
    oProcess = NEW System.Diagnostics.Process().
    
    oProcess:StartInfo:FileName = "wmic.exe".
    oProcess:StartInfo:Arguments = "printer get name, deviceID".
    oProcess:StartInfo:CreateNoWindow         =  TRUE.
    oProcess:StartInfo:UseShellExecute        =  FALSE.
    oProcess:StartInfo:RedirectStandardError  =  TRUE.
    oProcess:StartInfo:RedirectStandardOutput =  TRUE.
    oProcess:Start().
    
    lcstdout = oProcess:StandardOutput:ReadToEnd().
    lcstderr = oProcess:StandardError:ReadToEnd().
    
    oProcess:WaitForExit().
    
    lcstdout = lcstdout + oProcess:StandardOutput:ReadToEnd().
    lcstderr  = lcstderr + oProcess:StandardError:ReadToEnd().
    
    

    【讨论】:

    • 这个工作的原因是我的 PC 上有一些文件,使得像 System.Diagnostics.Process 这样的类可以从我的 AppBuilder 中访问。你知道我在哪里可以找到那个文件吗?
    • 这是 .Net 类,有关于该主题的完整手册。 documentation.progress.com/output/ua/OpenEdge_latest/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    相关资源
    最近更新 更多