使用os.system()或subprocess()通过Python运行Rscript

时间:2015-02-14 10:43:38

标签: python windows command-line rscript

我在使用os.system()或subprocess()通过Python运行Rscript时遇到问题。

使用os.system()通过python运行命令通常对我来说很好(例如使用gdalwarp.exe)但不适用于Rscript.exe。

我能看到的唯一区别是路径中的空格。

通过将路径放在引号中,可以在CMD窗口中轻松克服路径中空格的问题。 执行以下命令是成功的。

"C:/Program Files/R/R-3.0.2/bin/Rscript.exe" "D:/.../otsu_Script.R"

但我被Python困住了。 到目前为止我用python尝试了什么:

os.system("C:/Program Files/R/R-3.0.2/bin/Rscript.exe" "D:/.../otsu_Script.R")
os.system(r"C:/Program Files/R/R-3.0.2/bin/Rscript.exe" "D:/.../otsu_Script.R")
os.system(r'"C:/Program Files/R/R-3.0.2/bin/Rscript.exe" "D:/.../otsu_Script.R"')
subprocess.call([r'C:/Program Files/R/R-3.0.2/bin/Rscript.exe', r'D:/.../otsu_Script.R'])

有人看到我做错了什么吗? 提前致谢, 埃克

2 个答案:

答案 0 :(得分:1)

在精神上遇到这么简单的问题之后。我决定将RStatistics重新安装到没有空格或点的路径,例如: C:/R/bin/Rscript.exe

现在 subprocess.call(["C:/R/bin/Rscript.exe", "D:/otsu_Script.R"] )os.system("C:/R/bin/Rscript.exe D:/otsu_Script.R")工作正常。 应该在两天前试过......

...但是现在我仍然是一只快乐的猴子: - )

答案 1 :(得分:1)

现在可能已经太晚了,我看到你解决了这个问题,但我遇到了类似的问题(虽然在Linux系统中),现在可能对其他人有所帮助;虽然它直接在终端/命令行上工作,但是当在python中调用时,此命令不起作用。

os.system("R CMD BATCH ./read_lengths_batch.R")

我尝试了很多解决方案,包括subprocess和其他人,但发现它比这更容易。在我的情况下,我理解它在Windows中可能有所不同,我只需在调用结束时添加&,以便在后台运行。不知怎的,似乎R会用Python脚本关闭而不是做它的工作。

os.system("R CMD BATCH ./read_lengths_batch.R &")

奇怪的是,如果在我的文件夹中,我会使用.txt扩展名复制相同的文件:read_lengths_batch.Rread_lengths_batch.txt

希望它有所帮助!