文章 Duan Haihua · 二月 8, 2023 1m read

Caché中执行linux的shell命令

示例:在Caché的代码中执行shell命令“free -m |grep -i mem”

方法一:使用%Net.Remote.Utility类中的RunCommandViaZF方法

Set tSC = ##class(%Net.Remote.Utility).RunCommandViaZF("free -m |grep -i mem",.tTempFileName,,,0)

set file=##class(%FileCharacterStream).%New()
s file.Filename=tTempFileName

获得文件流后,再读取文件流中内容即可。

此方法本质是执行$ZF(-1)方法,由于$ZF(-1)在ENSEBLE2016.2后续的版本中不支持,导致后续版本可能会报错。

方法二:使用$ZF(-100)方法

s cmd="free"s tTempFileName=##class(%File).GetDirectory()_"output.txt"s errfile=##class(%File).GetDirectory()_"err.txt"s cmdFlags="/SHELL/STDOUT="""_tTempFileName_"""/STDERR="""_errfile_""""k args
s args = 5s args(1) = "-m"s args(2) = "|"s args(3) = "grep"s args(4) = "-i"s args(5) = "mem"s tSC=$ZF(-100,cmdFlags,cmd,.args)
set file=##class(%FileCharacterStream).%New()
s file.Filename=tTempFileName

获得文件流后,再读取文件流中内容即可。

对于$ZF(-100)的使用方法请参考文档:https://docs.intersystems.com/iris20211/csp/docbook/Doc.View.cls?KEY=RCOS_fzf-100