R: "Ошибка при вызове capture_console_output: 87" при использовании TerminalExecute () - PullRequest
2 голосов
/ 11 июля 2019

Я пытаюсь запустить исполняемый файл swat_edit.exe в R. Он отлично работает, когда я запускаю его непосредственно в командной строке, а также когда я запускаю его непосредственно на вкладке «Терминал» в R. Однако, когда я пытаюсь написать функцию в R для запуска исполняемого файла, я получаю сообщение об ошибке (я получаю ряд различных ошибок ...).

Я пытался использовать разные методы запуска файла:

1: я использовал system ("swat_edit"), которая возвращает следующую ошибку:

Unhandled Exception: System.IO.IOException: The handle is invalid.

   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.Console.set_CursorVisible(Boolean value)
   at SWEdit.Program.Run(String[] args)
   at SWEdit.Program.Main(String[] args)
[1] 17234

2: я использовал shell ("swat_edit"), который возвращает ту же ошибку, что и (1).

3: я использовал shell.exec ("swat_edit"). Это работает, но открывает исполняемый файл в новом окне, которое затем запускается в течение нескольких секунд и закрывается (как и предполагалось). Мне нужно, чтобы программа работала в окне терминала R, чтобы она могла выполнять много итераций в фоновом режиме, не мешая другим вещам. Это недопустимый вариант.

4: я попытался использовать TerminalSend (ID, "swat_edit") (из пакета rstudioapi). Это работает в том, что она отправляет команду в окно терминала в R. Когда я перехожу туда и нажимаю enter, она отлично работает, работает в окне терминала, как я хочу. Тем не менее, мне нужно выполнить много итераций, так что это также невозможно. Я попытался с помощью KeyboardSimulator перейти на вкладку «Терминал» и нажать клавишу ввода (что сработало), но это также не позволяет мне использовать компьютер для других целей во время выполнения моего кода.

5: я попытался использовать TerminalExecute ("swat_edit"), который возвращает следующий код ошибки:

Error calling capture_console_output: 87
[Process completed]
[Exit code: -532462766]

6: я попытался создать файл python, который запускает swat_edit.exe, а затем запустить этот файл в R. Файл python работает, когда я запускаю его сам, из командной строки или из терминала в R. Он делает однако, не работает, когда я пытаюсь запустить его в терминале R, используя TerminalExecute (та же ошибка, что и в (5)).

ПРИМЕЧАНИЕ. У меня есть другой исполняемый файл swat.exe (совершенно другая программа), который работает со всеми вышеупомянутыми методами.

Итак, подведем итог: swat_edit.exe отлично работает в командной строке и R-терминале, но не работает, когда я пытаюсь запустить его с использованием R-кода (либо system (), shell (), либо TerminalExecute ().

Я не могу понять разницу между terminalExecute () и вводом строки в терминал и нажатием Enter, но, видимо, между ними что-то происходит ...

Воспроизведение этого будет утомительно, поскольку в нем используются внешние программы, но если у кого-то есть какие-либо представления о сообщениях об ошибках или о том, как я могу скопировать строку и запустить ее в терминале без каких-либо помех, это было бы очень полезно.

РЕДАКТИРОВАТЬ: Я нашел метод, который решает мою проблему. Я создал .bat файл, который запускает swat_edit свернутым. Мне удалось запустить этот файл .bat с помощью функции оболочки (или любой другой команды, о которой я говорил) в R. Это не отвечает на вопрос, почему у меня возникли проблемы, которые я описал, и не позволяет мне запустить swat_edit в терминал R, но для меня этого достаточно.

Файл .bat был просто следующим: «START / MIN / WAIT C: \ ~ \ SWAT_Edit.exe»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...