在R:使用system()传递带有空格的python命令

时间:2015-04-29 12:48:49

标签: python r system whitespace argument-passing

我试图通过命令promt将R(在Windows x64 Rstudio上)的python命令传递给python脚本。如果我直接输入cdm,它会起作用,但如果我使用R函数system()通过R输入则不行。格式是(这是我在windows cmd shell / promt中写的方式):

pyhton C:/some/path/script <C:/some/input.file> C:/some/output.file

这适用于cmd promt,并使用输入文件(在&lt;&gt;中)运行脚本并提供输出文件。我以为我在R里可以做到:

system('pyhton C:/some/path/script <C:/some/input.file> C:/some/output.file')

但是这给出了关于

的python错误
error: unparsable arguments: ['<C:/some/input.file>', 'C:/some/output.file']

似乎R或windows解释的空格不同于我只是将行写入(或复制粘贴)到cmd promt。怎么做。

1 个答案:

答案 0 :(得分:1)

来自?system

  

多年来,这个界面变得相当复杂:请参阅   system2用于更便携和灵活的界面   推荐用于新代码。

System2接受参数args作为命令的参数。

所以你可以尝试:

system2('python', c('C:\\some\\path\\script', 'C:\\some\\input.file', 'C:\\some\\output.file'))

在Windows上:

R文档在这一点上并不是很清楚(或者也许只是我),无论如何,似乎在Windows上建议的方法是使用shell(),它比{{1}更少。 }和system,加上redirection operators似乎效果更好(比如&lt;或&gt;)。

system2

这个命令的作用是:

  1. 调用python
  2. 告诉python执行脚本shell ('python C:\\some\\path\\script < C:\\some\\input.file > C:\\some\\output.file') 。在这里,我们需要使用'\'来逃避'\'。
  3. 然后我们使用'&lt;'将一些输入传递给脚本operator和input.file
  4. 我们将输出(使用'&gt;')重定向到输出文件。