我在使用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'])
有人看到我做错了什么吗? 提前致谢, 埃克
答案 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.R
和read_lengths_batch.txt
。
希望它有所帮助!