【问题标题】:Running a Windows executable file from within R with command line options使用命令行选项从 R 中运行 Windows 可执行文件
【发布时间】:2013-04-21 05:47:21
【问题描述】:

我正在尝试使用调用从 R 中调用名为 AMDIS 的 Windows 程序

system("C:/NIST08/AMDIS32/AMDIS_32.exe /S C:/Users/Ento/Documents/GCMS/test_cataglyphis_iberica/queens/CI23_Q_120828_01.CDF")

为了对名为CI23_Q_120828_01.CDF 的文件进行分析(使用/S 开关指定),但似乎无论我尝试什么文件都没有正确加载,大概是因为选项不是过去了。有谁知道我可能做错了什么?

现在这个命令要么

  1. 什么都不做,
  2. 弹出AMDIS,但不加载我指定的文件
  3. 给我错误

    警告信息:

运行命令'C:/NIST08/AMDIS32/AMDIS_32.exe /S C:/Users/Ento/Documents/GCMS/test_cataglyphis_iberica/queens/CI23_Q_120828_01.CDF' 状态为 65535

(我不知道是什么导致了同一命令的这些不同结果)

(在第 8 页 here 描述了 AMDIS 命令行选项)

干杯,
汤姆

编辑:
发现它与正斜杠和反斜杠有关 - 运行

system("C:\\NIST08\\AMDIS32\\AMDIS_32.EXE C:\\Users\\Ento\\Documents\\GCMS\\test_cataglyphis_iberica\\queens\\CI23_Q_120828_01.CDF /S /E")

似乎有效 - 谢谢大家的建议!

【问题讨论】:

  • 你说/S,但你的电话中有/s。如果您打开终端并按原样键入命令,它会起作用吗?
  • 改成了/S,可惜还是不行
  • 但主要问题是如何正确传递命令行选项?
  • 不过,直接在终端中测试该命令很重要,这样您就可以排除大量其他可能出错的事情;即,也许您已经正确传递了命令行选项,但由于其他原因而失败:错误的选项、错误的输入、错误的安装等。
  • 嗯仍然没有运气,似乎在 Windows C:\NIST08\AMDIS32\AMDIS32$.EXE C:\Users\Ento\Documents\GCMS\test_cataglyphis_iberica\queens\CI23_Q_120828_01 的命令提示符下。 CDF /S /E 工作正常,但我似乎无法在 R 中完成这项工作......我认为它必须与正斜杠和反斜杠有关。有什么想法吗?

标签: r call external executable


【解决方案1】:

你听说过bquotenoquotesQuotedQuotequoteenquoteQuotes,现在认识shQuote!!! :-)

这个小函数调用用于格式化要传递给操作系统外壳的字符串。就我个人而言,我发现我可以卷入反斜杠逃离地狱,shQuote 救了我。只需像在您选择的命令行上一样键入字符串('sh' 用于 Unix 类似 bashcsh 用于 C-shell 和 'cmd' 用于 Windows shell)和 shQuote将使用系统将其格式化为来自R 的呼叫:

shQuote("C:/NIST08/AMDIS32/AMDIS_32.exe /S C:/Users/Ento/Documents/GCMS/test_cataglyphis_iberica/queens/CI23_Q_120828_01.CDF" , type = "cmd" )
#[1] "\"C:/NIST08/AMDIS32/AMDIS_32.exe /S C:/Users/Ento/Documents/GCMS/test_cataglyphis_iberica/queens/CI23_Q_120828_01.CDF\""

更一般地,您可以像这样使用shQuote

system( shQuote( "mystring" , type = c("cmd","sh") ) , ... )

【讨论】:

  • 嗯仍然没有运气,似乎在 Windows C:\NIST08\AMDIS32\AMDIS32$.EXE C:\Users\Ento\Documents\GCMS\test_cataglyphis_iberica\queens\CI23_Q_120828_01 的命令提示符下。 CDF /S /E 工作正常,但我似乎无法在 R 中完成这项工作......我认为它必须与正斜杠和反斜杠有关。有什么想法吗?
  • 我的第一个问题是直接在命令行中输入它是否按预期工作?如果是这样,我的第二个想法是它与权限有关吗?尝试以管理员权限运行 R(右键单击...属性...安全...运行方式...或类似的东西),看看是否有帮助。您在 R 中看到的正斜杠将作为反斜杠传递给命令行,所以这不是问题。
  • 是 C:\NIST08\AMDIS32\AMDIS32$.EXE C:\Users\Ento\Documents\GCMS\test_cataglyphis_iberica\queens\CI23_Q_120828_01.CD‌​F /S /E 直接在 Windows 命令中键入提示工作正常。也尝试了管理员权限,但仍然没有运气。如果我输入 R string=shQuote("C:/NIST08/AMDIS32/AMDIS32$.EXE C:/Users/Ento/Documents/GCMS/test_cataglyphis_iberica/queens/CI23_Q_120828_01.CDF /S /E", type = "cmd" ) 系统(字符串)什么也没发生...
  • 好的,试试用引号括住第二个参数?此外,$ 符号在可执行文件的名称中是一件奇怪的事情。我想知道这是否会导致问题(但我明白你为什么在文档中这样做是为了从第三方程序调用它)
  • 我有一个最后的想法 - 也许由于文件名作为参数传递给程序,也许你确实需要使用反斜杠,在这种情况下你可以传递它们通过像这样逃避它们来从 R 中转义:C:\\Users\\Ento\\Documents\\GCMS\\test_cataglyphis_iberica\\queens\\CI23_Q_120828_01.CD‌​F 请让我知道这是否有效!
猜你喜欢
  • 2014-09-16
  • 2021-12-21
  • 1970-01-01
  • 2019-09-27
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多