Command line 如何在Progress-4GL中捕获OS-COMMAND结果?

Command line 如何在Progress-4GL中捕获OS-COMMAND结果?,command-line,openedge,progress-4gl,Command Line,Openedge,Progress 4gl,我正在使用日志记录设施,如中所述: 这很好用 现在,我想在输出文件中添加OS-COMMAND的结果。 我已经尝试了以下方法:(将结果放入新创建的文件中) 这工作正常。 所以,我知道命令运行良好。但是,以下情况不起作用: OS-COMMAND NO-WAIT VALUE("WMIC printer get name, deviceID >> C:\Temp_Folder\LogFile.txt"). 这是显而易见的,因为进程应用程序在写入时锁定了C:\Temp\u

我正在使用日志记录设施,如中所述:

这很好用

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

这工作正常。
所以,我知道命令运行良好。但是,以下情况不起作用:

OS-COMMAND NO-WAIT VALUE("WMIC printer get name, deviceID >> C:\Temp_Folder\LogFile.txt").
这是显而易见的,因为进程应用程序在写入时锁定了
C:\Temp\u Folder\Logfile.txt
,因此由
OS-COMMAND
打开的shell无法写入该文件

为了克服这一问题,我想了解一下
OS-COMMAND
的结果


我怎样才能做到这一点呢?

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

您可以启动一个批处理文件,让它执行一些“保证”的输出错误处理,请参阅

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


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

您可以启动一个批处理文件,让它执行一些“保证”的输出错误处理,请参阅

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


这样做之所以有效,是因为我的电脑上有一些文件,可以从我的AppBuilder访问类似
System.Diagnostics.Process的类。你知道我在哪里可以找到那个文件吗?是.Net类,有一本关于这个主题的完整手册。这样做之所以有效,是因为我的电脑上有一些文件,可以从我的AppBuilder访问类似
System.Diagnostics.Process的类。你知道我在哪里可以找到那个文件吗?是.Net类,有一本关于这个主题的完整手册。
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").
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().