【发布时间】:2015-04-15 09:22:10
【问题描述】:
我在使用 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'])
有人看到我做错了吗? 提前致谢, 艾克
【问题讨论】:
-
调用外部程序的正确方法是使用
subprocess。那么这个解决方案有什么问题呢? -
子进程命令应该可以工作。
system使用cmd /c commandline,因此将整个命令行用引号括起来,例如os.system('""C:/Program Files/R/R-3.0.2/bin/Rscript.exe" "D:/.../otsu_Script.R""')。正斜杠在这里起作用,因为参数被引用(即正斜杠不会被解释为开关),所以不需要r"raw string"。 -
抱歉,
os.system('""C:/....script.R""')和subprocess.call([r'C:/....script.R')都无法正常工作。
标签: python windows command-line rscript