Запустите команду оболочки и верните результат как результат пользовательской функции - PullRequest
3 голосов
/ 07 июня 2010

Я хотел бы написать пользовательскую функцию OpenOffice, которая запускает команду оболочки и помещает результат в ячейку, из которой она была вызвана.У меня работает базовый макрос, но я не могу найти способ записать вывод команды.

Function MyTest( c1 )
    MyTest = Shell("bash -c "" echo hello "" ")
End Function

Выше всегда возвращается 0.Глядя на документацию команды Shell, я не думаю, что она действительно возвращает STDOUT.

Как мне захватить вывод, чтобы я мог вернуть его в моей функции?

Ответы [ 2 ]

1 голос
/ 02 мая 2013

Ответ Кимбала Робинсона работает, но имеет недостаток в использовании файла. Он медленный (по сравнению с использованием только памяти), и вы должны впоследствии удалить файл (хотя, поместив его в / tmp, он, как правило, будет автоматически удален).

Альтернативой является передача данных через буфер обмена:

Dim myCommand As String
myCommand = "echo hello world"
Shell ("bash", 1, "-c "" " & myCommand & " | xclip -selection clipboard"" ", true)
' setting the 4th parameter to true ensures that the Shell function will wait until '
' the command terminates before returning '

' then paste the content of the clipboard '
Dim dh As Object
dh = createUnoService("com.sun.star.frame.DispatchHelper")
dh.executeDispatch(StarDesktop.CurrentFrame, ".uno:Paste", "", 0, Array())

Это вставит вывод команды в текущую точку активного документа.

Обратите внимание, что если команда выдает несколько строк, появится диалоговое окно «Импорт текста» (я не знаю, как это предотвратить).

1 голос
/ 15 июля 2010

Можете ли вы перенаправить вывод во временный файл, а затем прочитать содержимое этого файла другой командой?

например, Shell("bash -c "" echo hello > tmp.txt "" ")

...