Комментарии 5
Есть только одна большая проблема, длина командной строки ограничена 256 символами, что может очень сильно мешать.
плюс ко всему нет возможности прочитать отдельно лог ошибок
мой пример лишен этих проблем
плюс ко всему нет возможности прочитать отдельно лог ошибок
мой пример лишен этих проблем
ClassMethod ExecuteCommand(cmd As %String, errmsg As %String, Output result As %String, display = 0) As %Status
{
s tmpLog=##class(%FileBinaryStream).%New()
d tmpLog.Write(""),tmpLog.SaveStream()
s errLog=##class(%FileBinaryStream).%New()
d errLog.Write(""),errLog.SaveStream()
s ec=$zf(-1,cmd_" 1>"""_tmpLog.Filename_""" 2>"""_errLog.Filename_"""")
i display d tmpLog.OutputToDevice()
if $isobject($g(errmsg)) {
d errmsg.CopyFrom(errLog)
} else {
s errmsg=errLog.Read()
}
if $isobject($g(result)) {
d result.CopyFrom(tmpLog)
} else {
s result=""
while 'tmpLog.AtEnd {
s result=result_tmpLog.Read()
}
}
d errLog.Clear()
d tmpLog.Clear()
q $$$OK
}
+2
Документация:
- %Net.Remote.Utility:RunCommandViaCPIPE()
- %Net.Remote.Utility:RunCommandViaZF()
+1
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Исполнение команд операционной системы на сервере Caché