Я хочу запустить скрипт R из VBA, для которого я использую rscript.exe.Я также передал этому сценарию 2 аргумента.Выполнение должно выполняться синхронно , и оба вывода должны отображаться live и сохраняться в лог-файле .
Пока я могусоздайте команду, используйте модуль cpearson shellAndwait, чтобы запустить ее из VBA синхронно (VBA ожидает выполнения команды оболочки, прежде чем продолжить) и получить вывод в реальном времени в симпатичном окне приглашения cmd.
batchCommand = Chr(34) & r_location & Chr(34) & _
" --verbose " & _
Chr(34) & fp_rscript & Chr(34) & _
" " & Chr(34) & arg1 & Chr(34) & _
" " & Chr(34) & arg2 & Chr(34)
errorcode = ShellAndWait (batchCommand, 0, vbMaximizedFocus, AbandonWait)
Однако, если мой R-скрипт завершается неудачно, errorcode по-прежнему равен 0, и единственный способ получить выходные данные - это вставить batchCommand в приглашение cmd
Добавление cmd / K и перенос всего во второй набор «не вариант,поскольку shellandwait будет ждать, пока пользователь закроет приглашение cmd вручную.
Поэтому я хотел бы, чтобы вывод был записан в текстовый файл, для которого я нашел это решение с использованием powershell & tee.
Однако мой новый batchCommand, использующий powershell, не работает.
batchCommand = "powershell.exe " & _
Chr(34) & r_location & Chr(34) & _
" --verbose " & _
Chr(34) & fp_rscript & Chr(34) & _
" " & Chr(34) & fp_rscript & Chr(34) & _
" " & Chr(34) & arg2 & Chr(34) & _
" | tee " & Chr(34) & logfile & Chr(34)
batchCommand выглядит так:
?batchCommand
powershell.exe "C:\Users\...\bin\RScript.exe" --verbose "E:\...\stage_2\antares_model_builder_stage_2.R" "E:\...\stage_2\antares_model_builder_stage_2.R" "E:\...\2018-09-28-1232 srv6_19-20_basecase" | tee "E:\...\2018-09-28-1232 srv6_19-20_basecase\s2_rscript_logfile.txt"
Как указано в комЯ больше не могу вводить эту batchCommand в cmd, поскольку она пытается интерпретировать тройник.
"'tee" не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл. "
Вставка команды в powershell дает:
Неустранимая ошибка: невозможно открыть файл 'E: \ SRV6 \ vanilla_hybrid \ 030': такого файла или каталога нет
Так что это связано с пробелами в путях.Добавление "" arround всех аргументов после powershell.exe дает ту же ошибку.Однако использование '&' работает:
& "C:\Users\hgd253\appdata\Local\Microsoft\AppV\Client\Integration\5A67571D-6F50-4EAD-BB33-A0D712D7FC6A\Root\R\R-3.3.3\bin\RScript.exe" --verbose "E:\SRV6\vanilla_hybrid\030 scripts\libraries\stage_2\antares_model_builder_stage_2.R" "E:\SRV6\vanilla_hybrid\030 scripts\libraries\stage_2\antares_model_builder_stage_2.R" "E:\SRV6\vanilla_hybrid\100 input buffer\2018-09-28-1337 srv6_19-20_basecase"
Теперь возникает вопрос, как передать эту строку в качестве аргумента в powershell -command?В файлах справки указано
Если значение Command является строкой, команда должна быть последним параметром в команде, поскольку любые символы, введенные после команды, интерпретируются как аргументы команды.
Чтобы написать строку, запускающую команду Windows PowerShell, используйте формат: «& {}», где кавычки указывают строку, а оператор invoke (&) вызывает выполнение команды.
Итак, я попробую еще раз:
powershell -command "& {"C:\Users\hgd253\appdata\Local\Microsoft\AppV\Client\Integration\5A67571D-6F50-4EAD-BB33-A0D712D7FC6A\Root\R\R-3.3.3\bin\RScript.exe" --verbose "E:\SRV6\vanilla_hybrid\030 scripts\libraries\stage_2\antares_model_builder_stage_2.R" "E:\SRV6\vanilla_hybrid\030 scripts\libraries\stage_2\antares_model_builder_stage_2.R" "E:\SRV6\vanilla_hybrid\100 input buffer\2018-09-28-1337 srv6_19-20_basecase"}"
Fatal error: cannot open file 'E:\SRV6\vanilla_hybrid\030': No such file or directory
Может ли кто-нибудь помочь мне выполнить это последнее требование (записать вывод в файл журнала)?