我正在尝试在R中运行一个名为swat_edit.exe的可执行文件。当我直接在命令提示符下运行它,以及直接在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转到“终端”选项卡,然后按Enter键(这有效),但这也不允许我在运行代码时将PC用于其他目的。
5:我尝试使用terminalExecute(“ swat_edit”),它返回以下错误代码:
Error calling capture_console_output: 87
[Process completed]
[Exit code: -532462766]
6:我尝试制作一个运行swat_edit.exe的python文件,然后在R中运行该文件。当我从命令提示符或R终端中单独运行该文件时,该python文件便可以工作。但是,当我尝试使用terminalExecute在R终端中运行它时,它无法工作(与(5)中的错误相同)。
注意:我还有一个名为swat.exe(完全不同的程序)的可执行文件,可与所有上述方法一起使用。
因此,总而言之:swat_edit.exe可以在命令提示符和R终端中完美运行,但是当我尝试使用R代码(system(),shell()或terminalExecute())运行它时却无法正常工作。
我无法弄清terminalExecute()和在终端中键入字符串并按Enter键之间的区别,但是显然两者之间发生了某些事情...
由于使用外部程序来重现此内容将很繁琐,但是如果任何人对错误消息或我如何能够在终端中不受干扰地复制字符串并运行它有任何想法,将不胜感激。 / p>
编辑:我找到了解决我的问题的方法。我创建了一个最小化运行swat_edit的.bat文件。我能够使用R中的shell函数(或我提到的任何其他命令)运行此.bat文件。这无法回答我遇到我描述的问题的原因,并且无法让我在其中运行swat_edit R终端,但对我来说已经足够了。
.bat文件仅是以下内容: “ START / MIN / WAIT C:\〜\ SWAT_Edit.exe”