我正在尝试从R运行Windows可执行文件。我已设法使用以下命令从R打开可执行文件:
class AsyncContextManager:
async def __aenter__(self):
await log('entering context')
async def __aexit__(self, exc_type, exc, tb):
await log('exiting context')
要运行可执行文件,我需要通过单击“加载设置文件”按钮导入Excel文件(参见下图)。因此,该按钮是可执行文件的一部分。
我怎么能从R?
这样做我尝试过这个命令,但它不起作用:
system2('cmd', args=c('/c', '"C:/Program Files (x86)/UIFormModel.exe"'))
答案 0 :(得分:2)
有几点:
通常一个人没有直接在C:\Program Files (X86)
下的.exe文件,所以先仔细检查路径名。我怀疑它不是问题,而是如下所示。
请注意下面的引用
您确定该程序接受命令行参数作为其GUI的替代方法吗?你可以从Windows cmd线运行吗?如果没有,你可以写一个autohotkey(参见下面的AutoHotKey部分)或autoit脚本来控制它并从R中启动它。
如果确实接受了参数,请确保程序允许正斜杠 - 如果不使用反斜杠
如果程序接受命令行参数,请尝试以下代码:
system2("C:/Program Files (x86)/UIFormModel/UIFormModel.exe", "F:/template_LHS1.xlsx")
另一种方式是:
shell('"C:/Program Files (x86)/UIFormModel/UIFormModel.exe" F:/template_LHS1.xlsx')
例如,使用免费CSVfix我能够运行以下内容并发现它们有效:
system2("C:/Program Files (x86)/CSVfix/CSVfix.exe", "help")
shell('"C:/Program Files (x86)/CSVfix/CSVfix.exe" help')
有关您可能希望使用的其他参数,请参阅?system2
和?shell
。
如果程序不接受命令行参数,则此示例AutoHotKey脚本将启动WinMerge,一个用于Windows的免费文件比较GUI,将WinMerge可执行文件与其自身进行比较。这会生成弹出警告,AutoHotKey脚本通过向WinMerge窗口发送Enter键来解除该警告消息。
确保安装了AutoHotKey和WinMerge,下面的脚本位于当前目录中的文本文件test.ahk中,由getwd()
给出,然后从R控制台运行:
shell("test.ahk")
这是test.ahk脚本:
exe = "C:\Program Files (x86)\winmerge\winmergeu.exe"
Run %exe% %exe% %exe%
WinWait WinMerge
; dismiss the dialog warning that both files are the same
Send {Enter}
如果你走这条路线,这个剧本需要以特定于你的程序的方式进行修改或重写。
答案 1 :(得分:1)
我一直在尝试多种替代方案,但我没有用参数成功调用可执行文件。不过,我可以建议使用.bat文件解决方法:
system2("cmd.exe", input='"D:/workspace/execute.bat"')
其中execute.bat可能包含以下内容:
C:/ Program Files(x86)/UIFormModel.exe F:/template_LHS1.xlsx