文章
· 二月 8, 2023 阅读大约需 1 分钟

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 = 5
s 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

讨论 (0)1
登录或注册以继续