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().